像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()(或者在@Angular/universal应用程序的情况下调用platformDynamicServer()(,可以创建一个由PlatformModule配置的注入器。此处提供PLATFORM_ID

该值是一个字符串:'browser'(或适用于通用应用程序的'server'(。

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

edit:根据请求,链接到源代码:此处提供: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其中Injector是使用传入的提供程序创建的:https://github.com/angular/angular/blob/bafec59b33819b8a47eb9723f8014618c9f1b991/packages/core/src/application_ref.ts#L181-L186

相关内容

  • 没有找到相关文章

最新更新