【问题标题】:Angular. Router DI not working when using APP_INITIALIZER角。使用 APP_INITIALIZER 时路由器 DI 不工作
【发布时间】:2017-03-27 16:04:54
【问题描述】:

我正在使用APP_INITIALIZER 以下列方式从服务器预加载应用程序配置,AppModule

providers: [
    ConfigService,
    {
      provide: APP_INITIALIZER,
      useFactory: configServiceFactory,
      deps: [ConfigService],
      multi: true
    }
  ],

然后,从ConfigService手动注入ApiService

@Injectable()
export class ConfigService {

  private api: ApiService;

  public constructor(
    private injector: Injector
  ) {

    // Avoid cyclid dependencies, inject manually:
    this.api = injector.get(ApiService);
  }

最后,router 在注入ApiService 时是未定义的

import { Http, Headers, RequestOptionsArgs, Response } from '@angular/http';
import { Router } from '@angular/router';

@Injectable()
export class ApiService {

  constructor(
    private router: Router,
    private http: Http
  ) {

    console.log(router, 'router'); // undefined
    debugger;

这里是plunker

任何想法如何解决/解决它?

【问题讨论】:

    标签: angular angular2-routing angular2-di


    【解决方案1】:

    此作品适用于 anguler 4

    import { APP_INITIALIZER, Provider, Injector } from '@angular/core';
    
    export function appInitializerFactory(
        injector: Injector
    ): () => Promise<any> {
        return () => {
            return new Promise<any>((resolve, reject) => {
                setTimeout(() => {
                    const router = injector.get(Router);
                    // do stuff
                    resolve(this.config);
                });
            });
        }
    }
    
    export const appInitializerProvider: Provider = {
        provide: APP_INITIALIZER,
        useFactory: appInitializerFactory,
        deps: [
            Injector
        ],
        multi: true
    };
    

    【讨论】:

    • 虽然我以这种方式获取路由器,但初始化似乎陷入了无限循环,并带有 setTimeout...
    • 我看到它在你的柱塞中不起作用,但我可以让它通过。 src/app.ts: 31 -> RouterModule.forRoot(),到 RouterModule.forRoot([]),
    猜你喜欢
    • 2015-11-11
    • 1970-01-01
    • 1970-01-01
    • 2020-05-21
    • 2018-05-23
    • 2016-12-07
    • 1970-01-01
    • 2018-05-27
    • 2021-11-19
    相关资源
    最近更新 更多