我已将此代码添加到我的app.module.ts
中
providers: [ AppConfigService,
{
provide: APP_INITIALIZER,
useFactory: (config: AppConfigService) => () => config.getAppConfig(),
deps: [AppConfigService],
multi: true
},
]
获取此错误
问题:我已使用ngx-permission pkg获得许可。我设置了route权限方法。但是当我刷新页面时,主页上的时间重定向却停留在当前页面上。所以我尝试to load permissions before application start up method来解决这个问题,但是遇到了这个错误。
config.getAppConfig() // call when application start up
有任何想法请帮忙。其他解决方案也欢迎。
答案 0 :(得分:2)
我已经解决了这个解决方案的问题
将功能创建到app.module.ts
export function loadConfig(appService: AppConfigService): Function {
return () => appService.getAppConfig();
}
AppConfigService,
{
provide: APP_INITIALIZER,
useFactory: loadConfig,
deps: [AppConfigService],
multi: true
},
issue into `HttpInterceptor` so i used injector for that
constructor(private inj: Injector) {
super(
inj.get(XHRBackend),
inj.get(RequestOptions)
);
}
答案 1 :(得分:2)
当您的APP_INITIALIZER
中的依赖项依赖于Angular服务时,例如,可能会发生此错误。 Router
。
解决方案是延迟注入,方法是将服务的构造函数更改为接受Injector
,然后在构造函数之外解析值。
示例AppConfigService
:
import { Injectable, Injector } from '@angular/core';
import { Router } from '@angular/router';
@Injectable({
providedIn: 'root'
})
export class AppConfigService {
// Helper property to resolve the service dependency.
private get _router() { return this._injector.get(Router); }
constructor(
//private _router: Router
private _injector: Injector
) { }
navigate() {
this._router.navigate(['/']);
}
}
答案 2 :(得分:0)
我在动态更新路由时遇到了同样的问题。
实际上,您不必手动注入依赖项。您所要做的就是拆分循环。先解析依赖,再使用。
这是路由器的示例,但您可以设置任何您喜欢的依赖项。
VersionId
配置类:
// AppModule
{
provide: APP_INITIALIZER,
useFactory: myFactoryUpdatingRoutes, // init routes from special config
multi: true,
deps: [MyRouterLoader],
},