Angular: 封装 window 令牌

本文介绍了如何在Angular中使用InjectionToken封装WINDOWToken,确保在浏览器环境中提供window对象,在非浏览器如服务端环境下返回空对象,依赖于PLATFORM_ID常量进行区分。
摘要由CSDN通过智能技术生成

封装 window 令牌

import { isPlatformBrowser } from '@angular/common';
import { InjectionToken, NgModule, PLATFORM_ID } from '@angular/core';
export const WINDOW = new InjectionToken('WindowToken');

@NgModule({
  declarations: [],
  imports: [],
  providers: [
    {
      provide: WINDOW,
      // 封装这个 window 只希望在浏览器环境下给一个 window 对象,在其他环境比如服务端环境就给一个空对象
      useFactory(platformId: Object): Window | Object {
        return isPlatformBrowser(platformId) ? window : {}
      },
      // useFactory 令牌依赖 PLATFORM_ID
      // PLATFORM_ID 是一个常量,代表平台的一个ID,区分浏览器平台还是服务器平台或者其他平台
      deps: [PLATFORM_ID]
    }
  ]
})
export class ServicesModule { }

在组件中使用

  constructor(
    // readonly el: ElementRef
    @Inject(WINDOW) private win: Window
  ) { }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梁什么鸭,

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值