簡體   English   中英

@在Angular2應用程序外注入

[英]@Inject outside Angular2 application

是否可以檢索任何@Injectable如:

var config = @Inject(Config);

謝謝

如果要從依賴項注入獲取新實例,則需要引用Injector,然后可以使用以下方法獲取新實例:

injector.get(Config);

如何獲得對Injector的引用取決於代碼所在的位置。
在Angular組件或服務中,只需注入它

constructor(private injector:Injector) {}

您也可以像這樣創建自己的注射器

var injector = Injector.resolveAndCreate([Car, Engine]);

其中CarEngine是噴射器可以為其創建實例的提供者。

要使Angular應用程序的注入器在Angular應用程序之外使用,您可以使用

來自https://github.com/angular/angular/issues/4112#issuecomment-153811572的示例

let appInjectorRef: Injector;
export const appInjector = (injector?: Injector):Injector => {
    if (injector) {
      appInjectorRef = injector;
    }

    return appInjectorRef;
};

bootstrap(App, [
  Auth,
  HTTP_PROVIDERS,
  ROUTER_PROVIDERS,
  Car,
  Engine
]).then((appRef: ComponentRef) => {
  // store a reference to the application injector
  appInjector(appRef.injector);
});

let injector: Injector = appInjector();
injector.get(Car);

我發現將injector聲明為全局變量更加容易,因此可以更輕松地使用它。

在引導角度文件中:

declare global {
    var injector: Injector;
}

bootstrap(/* your bootstrap stuff */).then((appRef) => {
    injector = appRef.injector;
});

上面的代碼使您可以訪問代碼中其他任何位置的injector變量。

在需要Config實例的文件中:

import { Config } from './path/to/config.service';

class TestClass {
    private config: Config;

    constructor() {
        this.config = injector.get(Config);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM