は、あなたは何をインポートせずwindow
オブジェクトを使用することができますが、ちょうどあなたのtypescriptですコードでそれを使用することにより:
import { Component } from "@angular/core";
@Component({
templateUrl:"home.html"
})
export class HomePage {
public foo: string;
constructor() {
window.localStorage.setItem('foo', 'bar');
this.foo = window.localStorage.getItem('foo');
}
}
あなたもそう、サービス内のwindow
オブジェクトをラップすることができますが、テスト目的のためにそれを模擬することができます。
素朴な実装は次のようになります。
import { Injectable } from '@angular/core';
@Injectable()
export class WindowService {
public window = window;
}
アプリケーションをブートストラップするとき、それはどこでも利用可能ですので、あなたはその後、これを提供することができます。
import { WindowService } from './windowservice';
bootstrap(AppComponent, [WindowService]);
そして、ちょうどあなたのコンポーネントでそれを使用しています。
import { Component } from "@angular/core";
import { WindowService } from "./windowservice";
@Component({
templateUrl:"home.html"
})
export class HomePage {
public foo: string;
constructor(private windowService: WindowService) {
windowService.window.localStorage.setItem('foo', 'bar');
this.foo = windowService.window.localStorage.getItem('foo');
}
}
より洗練されたサービスは、メソッドをラップし、それを使用する方が快適だそう呼び出すことができます。
**ウィンドウ**を使用すると、プレーンジャバスクリプトと同じですか? – toskv
代わりに、ウィンドウオブジェクトをラップするサービスを作成することもできます。だから、テストでより簡単にそれを嘲笑することができます。 – toskv
@toskv私に例を挙げてもらえますか?サービスのための –