可以使用 Angular 的条件提供商来动态加载服务。在 AppModule 中使用 APP_INITIALIZER
创建一个 Promise,等待应用程序的环境加载完毕。然后,可以注入 APP_INITIALIZER
中返回的 Promise 和 isDevMode()
来确定应该加载哪个 ErrorHandler。
示例代码如下:
import { ErrorHandler, NgModule, APP_INITIALIZER, isDevMode } from '@angular/core';
class GlobalErrorHandler implements ErrorHandler {
handleError(error) {
// 处理全局错误的代码
}
}
@NgModule({
// ...
providers: [
{
provide: ErrorHandler,
useFactory: (envPromise: Promise) => {
return envPromise.then(env => {
if (!isDevMode()) {
return new GlobalErrorHandler();
} else {
// 使用 Angular 默认的 ErrorHandler
return new ErrorHandler();
}
});
},
deps: [Promise],
multi: true
},
{
provide: APP_INITIALIZER,
useFactory: () => () => Promise.resolve(),
multi: true
}
]
})
export class AppModule { }
在上面的示例中,APP_INITIALIZER
主要用于延迟注入,以便可以在应用程序启动之前等待环境加载完成。在 useFactory
中,envPromise
用于确定当前的环境,然后根据当前的环境返回相应的 ErrorHandler
实例。最后,把 multi
设置为 true,以便处理多个 ErrorHandler。
当然,应根据应用程序的具体需求进行调整。