ng2 - 将提供程序注入常规 class
ng2 - injecting a provider into a regular class
我通常可以将任何提供程序注入到我的组件中,但这仅限于组件吗?有什么方法可以将 ActivatedRoute
注入到在此上下文中使用的常规 class 中:
app.module.ts
@NgModule({
...
providers: [
AuthenticatedRequestOptions,
{ provide: RequestOptions, useClass: AuthenticatedRequestOptions }
],
...
})
已验证请求-options.model.ts
@Injectable()
export class AuthenticatedRequestOptions extends BaseRequestOptions {
constructor(@Inject(ActivatedRoute) public route: ActivatedRoute) {
super();
console.log('route', this.route);
}
}
只需将它作为参数添加到您的构造函数中
constructor(route: ActivatedRoute, private injector: Injector) {}
AuthenticatedRequestOptions
需要在某处提供 @Component()
、@NgModule()
、...并且 class 需要 @Injectable()
装饰器
@Injectable()
export class AuthenticatedRequestOptions extends BaseRequestOptions {
并且 class 需要自己注入。
如果用new AuthenticatedRequestOptions(...)
创建实例,不涉及Angulars DI,需要自己传参。
@Inject
允许将依赖项注入提供者,即使他们没有 @Injectable
装饰器,正确的语法是:
export class AuthenticatedRequestOptions extends BaseRequestOptions {
constructor(@Inject(ActivatedRoute) private route: ActivatedRoute) {
...
为了让提供者 class 使用 DI 的类型注释,它应该有 @Injectable
装饰器:
@Injectable()
export class AuthenticatedRequestOptions extends BaseRequestOptions {
constructor(private route: ActivatedRoute) {
...
我通常可以将任何提供程序注入到我的组件中,但这仅限于组件吗?有什么方法可以将 ActivatedRoute
注入到在此上下文中使用的常规 class 中:
app.module.ts
@NgModule({
...
providers: [
AuthenticatedRequestOptions,
{ provide: RequestOptions, useClass: AuthenticatedRequestOptions }
],
...
})
已验证请求-options.model.ts
@Injectable()
export class AuthenticatedRequestOptions extends BaseRequestOptions {
constructor(@Inject(ActivatedRoute) public route: ActivatedRoute) {
super();
console.log('route', this.route);
}
}
只需将它作为参数添加到您的构造函数中
constructor(route: ActivatedRoute, private injector: Injector) {}
AuthenticatedRequestOptions
需要在某处提供 @Component()
、@NgModule()
、...并且 class 需要 @Injectable()
装饰器
@Injectable()
export class AuthenticatedRequestOptions extends BaseRequestOptions {
并且 class 需要自己注入。
如果用new AuthenticatedRequestOptions(...)
创建实例,不涉及Angulars DI,需要自己传参。
@Inject
允许将依赖项注入提供者,即使他们没有 @Injectable
装饰器,正确的语法是:
export class AuthenticatedRequestOptions extends BaseRequestOptions {
constructor(@Inject(ActivatedRoute) private route: ActivatedRoute) {
...
为了让提供者 class 使用 DI 的类型注释,它应该有 @Injectable
装饰器:
@Injectable()
export class AuthenticatedRequestOptions extends BaseRequestOptions {
constructor(private route: ActivatedRoute) {
...