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
) { }