APP_INITIALIZER

时间:2017-10-19 14:37:22

标签: angular

我正在尝试检索我的APP_INITIALIZER

中网址中的数据

app.module.ts

export function init(config: ConfigService, router: Router) {
    return () => config.load(router);
}


providers : [
    ...
    {
      provide: APP_INITIALIZER,
      useFactory: init,
      deps: [ConfigService, Router],
      multi: true
    },
    ConfigService 
    ... 
]

配置-service.ts

@Injectable()
export class ConfigService 
    load(router: Router): Promise<any> {
        console.log('current url : ' + router.url);
        return new Promise(((resolve, reject) => resolve()));
    }
}

不幸的是我得到了

Cannot instantiate cyclic dependency! ApplicationRef ("[ERROR ->]"): in NgModule AppBrowserModule in ./AppBrowserModule@-1:-1

我也尝试在构造函数中使用Injector,但它也没有用。

我想做的甚至是可行的吗?

2 个答案:

答案 0 :(得分:3)

config-service.ts可以如下重写。

@Injectable()
export class ConfigService
    constructor(private injector: Injector){}

    load(): Promise<any> {
        const router = this.injector.get(Router);
        console.log('current url : ' + router.url);
        return new Promise(((resolve, reject) => resolve()));
    }
}

无需将Router作为依赖添加到app.module.ts中。

答案 1 :(得分:2)

我尝试做的事情是不可行的,因为APP_INITIALIZER发生在路由器init之前。 Creating an ebook with pandoc