【发布时间】:2021-08-20 17:36:15
【问题描述】:
我们的应用程序从一开始就需要一些服务。因此我们有一些提供程序,在启动时初始化它们。这是来自app.module.ts 中的providers 部分:
providers: [
{ provide: MAT_DATE_LOCALE, useValue: 'en-US' },
{
provide: APP_INITIALIZER,
useFactory: (service: MetaService) => () => service,
deps: [MetaService],
multi: true
}
],
这在 Angular 9-11 中运行良好。但是,在升级到 Angular 12 之后,甚至在一个空白的 Angular 12 项目中,这似乎会破坏应用程序。
虽然服务已创建。使用此正确记录:
useFactory: (service: MetaService) => () => { console.log(service); return service; },
但是,页面返回为空白页面。没有渲染任何组件,也没有发生路由。
CLI 上没有错误,浏览器控制台中也没有任何错误,只是一个空白页面。当我删除提供程序时,它似乎工作正常。
他们有没有改变,APP_INITIALIZER 在 Angular 12 中是如何工作的?如何修复或更新代码以使其再次工作?也许有更好的方法在启动时初始化服务?
【问题讨论】:
-
是的。使用 Angular 12,我们也可以将
APP_INITIALIZER与 observable 一起使用。但回报的承诺仍然有效。唯一的问题是,如果工厂返回 observable,它必须完成。另一方面,如果工厂返回一个承诺,它必须解决。如果你不能用这些知识解决问题,请与我们分享MetaService。 -
我再次阅读了您的问题。如果我错了,请纠正我。您是否尝试在启动时初始化您的服务?我不知道
MetaService的内容,所以无法评论APP_INITIALIZER是不是最好的方法。要修复此问题,您只需返回Promise.resolve()而不是service。 -
@nevzatopcu 感谢您的反馈。确切地说,我只想在启动时构建服务。服务本身并没有异步执行任何操作,它只是从构造函数中运行一个同步的
init方法。 -
@lampshade,MetaService 中有
subscribe方法吗? -
@DanielGimenez 刚刚看了看。它正在订阅 Angular 路由器。所以,是的,它是。但服务的构建无需等待完成。
标签: angular typescript angular12