像 PLATFORM_ID

问题描述

在基于价值的提供者(代币)中,我们有这样的东西(在模块中):

const CONFIG = 'CONFIG';
providers: [
    {
        provide: CONFIG,useValue: myConfigObj,},

因为我们在模块中定义了提供者,所以在服务中我们可以这样做:

constructor(@Optional() @Inject(CONFIG) config) {
    console.log(config);
}

但是当我们想像这样访问 PLATFORM_ID 时:

constructor(@Inject(PLATFORM_ID) private platformId) {

我们没有在模块的提供者中定义 PLATFORM_ID。这是在哪个模块中定义的?什么是 useValue

解决方法

已经在 Angular Community Discord 服务器上为您回答了这个问题,但我不确定您是否看到了。

通过在 main.ts 中调用 platformBrowserDynamic()(或 platformDynamicServer(),如果是@Angular/universal 应用),会创建一个由 PlatformModule 配置的注入器。 PLATFORM_ID 在这里提供。

该值是一个字符串:'browser'(或 'server' 用于通用应用)。

您可以在此处阅读有关平台注入器(它是根注入器的父级)的更多信息:https://angular.io/guide/hierarchical-dependency-injection#platform-injector

编辑:根据请求,源代码的链接:在此处提供:https://github.com/angular/angular/blob/11.2.9/packages/platform-browser-dynamic/src/platform_providers.ts#L27,然后将其传递到 createPlatformFactory:https://github.com/angular/angular/blob/11.2.9/packages/platform-browser-dynamic/src/platform-browser-dynamic.ts#L29 中,其中使用传入的提供程序创建注入器:{ {3}}

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...