Angular InjectionToken的一个具体使用例子

414 阅读1分钟

导入InjectionToken:

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

调用从@Angular/core导入的构造器,创建一个新的实例:

export const TOKEN_HOST_CLASS_PROVIDER = new InjectionToken<HostTokenComponentService>('TOKEN_HOST_CLASS_PROVIDER');

Injection构造器的实现:

export declare class InjectionToken<T> {
    protected _desc: string;
    readonly ɵprov: never | undefined;
    constructor(_desc: string, options?: {
        providedIn?: Type<any> | 'root' | 'platform' | 'any' | null;
        factory: () => T;
    });
    toString(): string;
}

Component构造器里的定义:

providers: [
    HostComponentService,
    {provide: TOKEN_HOST_CLASS_PROVIDER, useClass: HostTokenComponentService}
  ]

在Component 构造函数里进行注入:

export class HostDecoratorComponent {

  
  constructor(private hostComponentService: HostComponentService, @Inject(TOKEN_HOST_CLASS_PROVIDER) h){
    console.log('in HostDecoratorComponent, Host component service got from own Injector: ', hostComponentService, ' HostTokenComponentService: ', h);
    h.print();
  }

最后运行结果:

调用InjectionToken构造器,options的值为undefined:

更多Jerry的原创文章,尽在:“汪子熙”: