Angular 为什么要使用服务和令牌/OpaqueToken来获取窗口对象

Angular 为什么要使用服务和令牌/OpaqueToken来获取窗口对象,angular,typescript,angular2-opaquetoken,Angular,Typescript,Angular2 Opaquetoken,前几天我和一位不喜欢我的代码的同事交谈。在我的角度分量中,我访问窗口对象,如soprivate myWindow=window 他告诉我一个更好的方法是使用一个服务和一个令牌/OpaqueToken(我不知道什么是OpaqueToken),诸如此类 import { Injectable, OpaqueToken, } from '@angular/core'; export const WindowToken = new OpaqueToken('app.window');

前几天我和一位不喜欢我的代码的同事交谈。在我的角度分量中,我访问
窗口
对象,如so
private myWindow=window

他告诉我一个更好的方法是使用一个服务和一个令牌/OpaqueToken(我不知道什么是OpaqueToken),诸如此类

import {
    Injectable,
    OpaqueToken,
} from '@angular/core';

export const WindowToken = new OpaqueToken('app.window');

@Injectable()
export class WindowService {
    getWindow(): Window {
        return window;
    }
}
myWindow: Window;
constructor(@Inject(WindowToken) windowRef: WindowService) {
        this.myWindow = windowRef.getWindow();
}
然后我可以注入服务,然后像这样得到对象

import {
    Injectable,
    OpaqueToken,
} from '@angular/core';

export const WindowToken = new OpaqueToken('app.window');

@Injectable()
export class WindowService {
    getWindow(): Window {
        return window;
    }
}
myWindow: Window;
constructor(@Inject(WindowToken) windowRef: WindowService) {
        this.myWindow = windowRef.getWindow();
}
这一切看起来都很好,很干净,但我不明白使用令牌(或令牌做什么)和服务的优势,而不仅仅是通过
窗口
对象分配变量-有人能告诉我为什么使用服务和令牌是更好的做法吗?

这可能会消除您的疑虑: