Angular 依赖注入系统里 Injection token PLATFORM_ID 的使用场景

发布时间 2023-11-20 22:30:39作者: JerryWang_汪子熙

Angular 的依赖注入系统是它的核心特性之一,它使得我们可以轻松地在应用程序的各个部分共享和管理代码。在 Angular 的依赖注入系统中,InjectionToken 是一个特别重要的概念。InjectionToken 是一个用于参数类型的标记类,它可以用来在依赖注入器中注入特定的值。在这里,我们将重点讨论 PLATFORM_ID 这个特殊的 InjectionToken

PLATFORM_ID 是一个标记类,它标记了当前应用程序运行的平台。在 Angular 中,平台可以是浏览器、服务器或者其他一些平台。通过注入 PLATFORM_ID,我们可以在运行时确定当前的平台。这对于平台特定的代码来说非常有用,因为我们可以基于当前的平台动态地更改应用程序的行为。

例如,我们可能有一些只在浏览器中运行的代码,而在服务器端渲染(SSR)时我们不希望这些代码被执行。这时,我们可以使用 PLATFORM_ID 来检查当前平台是否是浏览器:

import { PLATFORM_ID } from '@angular/core';
import { isPlatformBrowser } from '@angular/common';

constructor(@Inject(PLATFORM_ID) private platformId: Object) { }

ngOnInit() {
  if (isPlatformBrowser(this.platformId)) {
    // 这些代码只在浏览器中运行
  }
}

在上面的代码中,我们首先从 @angular/core 导入了 PLATFORM_ID,然后从 @angular/common 导入了 isPlatformBrowser 函数。在组件的构造函数中,我们注入了 PLATFORM_ID,然后在 ngOnInit 方法中,我们使用 isPlatformBrowser 函数来检查当前平台是否是浏览器。如果是,那么我们就执行一些只在浏览器中运行的代码。

这种方式的好处是,我们的代码可以根据平台的不同而有不同的行为,而不需要更改代码的结构。这使得我们的代码更加灵活和可维护。

除了 isPlatformBrowser,Angular 还提供了 isPlatformServer 函数,我们可以用它来检查当前平台是否是服务器。这对于服务器端渲染(SSR)也非常有用。

以上是 PLATFORM_ID 的一个基本使用场景。然而,它的用途远不止于此。通过合理地使用 PLATFORM_ID,我们可以让我们的 Angular 应用程序在不同的平台上有不同的行为,而不需要更改代码的结构。这使得我们的代码更加灵活和可维护。

总的来说,PLATFORM_ID 是 Angular 的一个非常有用的工具,它可以帮助我们更好地管理和组织我们的代码。在实际的开发中,我们应该充分利用 PLATFORM_ID,以提高我们的代码质量和开发效率。