Angular 2 OpaqueToken 与 Angular 4 InjectionToken

typescript

1个回答

写回答

fangyuli

2025-07-08 09:20

+ 关注

Java
Java

Angular是一个流行的JavaScript框架,用于构建Web应用程序。在Angular中,依赖注入是一种非常重要的概念,它允许我们将一个对象注入到另一个对象中,以便实现松耦合的组件之间的通信。为了实现依赖注入,Angular提供了两个不同版本的Token:Angular 2中的OpaqueToken和Angular 4中的InjectionToken。

Angular 2 OpaqueToken

在Angular 2中,我们可以使用OpaqueToken来定义依赖注入时使用的Token。OpaqueToken是一个简单的类,它表示一个不透明的标记,用于标识依赖项。我们可以通过OpaqueToken来创建一个Token,并将其用作注入器的键。

下面是一个使用OpaqueToken的示例代码:

typescript

import { OpaqueToken } from '@angular/core';

// 创建一个Token

const MY_TOKEN = new OpaqueToken('my_token');

// 定义一个依赖注入的类

class MyService {

constructor(@Inject(MY_TOKEN) private myToken: any) {

console.log(myToken);

}

}

// 在模块中配置依赖注入

@NgModule({

providers: [

{ provide: MY_TOKEN, useValue: 'my_value' },

MyService

]

})

class MyModule { }

在上面的代码中,我们首先创建了一个OpaqueToken对象,命名为MY_TOKEN。然后,我们创建了一个名为MyService的类,并在构造函数中使用MY_TOKEN作为依赖注入的键。最后,在NgModule中,我们将MY_TOKEN配置为提供给MyService的值。

Angular 4 InjectionToken

在Angular 4中,Angular团队引入了InjectionToken来替换OpaqueToken。InjectionToken与OpaqueToken的功能基本相同,但有一些不同之处。InjectionToken是一个泛型类,它需要一个泛型参数来指定注入的类型。

下面是一个使用InjectionToken的示例代码:

typescript

import { InjectionToken } from '@angular/core';

// 创建一个Token

const MY_TOKEN = new InjectionToken<string>('my_token');

// 定义一个依赖注入的类

class MyService {

constructor(@Inject(MY_TOKEN) private myToken: string) {

console.log(myToken);

}

}

// 在模块中配置依赖注入

@NgModule({

providers: [

{ provide: MY_TOKEN, useValue: 'my_value' },

MyService

]

})

class MyModule { }

在上面的代码中,我们首先创建了一个InjectionToken对象,命名为MY_TOKEN,并指定了注入的类型为string。然后,我们创建了一个名为MyService的类,并在构造函数中使用MY_TOKEN作为依赖注入的键。最后,在NgModule中,我们将MY_TOKEN配置为提供给MyService的值。

在本文中,我们讨论了Angular中的依赖注入以及使用Token进行依赖注入的方法。我们了解了Angular 2中的OpaqueToken和Angular 4中的InjectionToken的区别。无论是使用OpaqueToken还是InjectionToken,它们都是用来标识依赖项的,以便在注入器中进行依赖注入。

通过使用Token,我们可以实现松耦合的组件之间的通信,并且能够轻松地更改或替换依赖项。这是Angular中非常强大和重要的一个特性,它使我们能够编写可维护和可扩展的代码。

参考代码:

typescript

import { NgModule, Inject, InjectionToken } from '@angular/core';

// 创建一个Token

const MY_TOKEN = new InjectionToken<string>('my_token');

// 定义一个依赖注入的类

class MyService {

constructor(@Inject(MY_TOKEN) private myToken: string) {

console.log(myToken);

}

}

// 在模块中配置依赖注入

@NgModule({

providers: [

{ provide: MY_TOKEN, useValue: 'my_value' },

MyService

]

})

class MyModule { }

在上面的代码中,我们创建了一个名为MY_TOKEN的InjectionToken,并指定了注入的类型为string。然后,我们创建了一个名为MyService的类,并在构造函数中使用MY_TOKEN作为依赖注入的键。最后,在NgModule中,我们将MY_TOKEN配置为提供给MyService的值。

通过使用InjectionToken,我们可以更好地定义和使用依赖注入的Token,使我们的代码更加清晰和可维护。

举报有用(4分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号