0
サービスをウィンドウ上のクリックイベントのコールバックを登録しようとしています。私は自分のコードから直接グローバルウィンドウオブジェクトにアクセスしたくないです。代わりにレンダラーを使用してグローバルリスナーを登録しようとしましたが、レンダラーのプロバイダがないというブラウザでは失敗します。私はコンポーネントで使用しますが、サービスで使用することはできません。これを達成するための好ましい方法は何ですか?ここでサービスからレンダラーにアクセス
は私の現在の作業アプローチである:ここで
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs/Observable';
@Injectable()
export class MyService {
constructor() {
Observable.fromEvent(window, 'click').subscribe(() => console.log('window click received'));
}
}
は私がやりたいものですが、それは失敗します。
import { Injectable, Renderer } from '@angular/core';
import { Observable } from 'rxjs/Observable';
import { Observer } from 'rxjs/Observer';
@Injectable()
export class MyService {
constructor (private renderer: Renderer) {
let clickEvent = new Observable<Event>(
(observer: Observer<Event>) => {
this.renderer.listenGlobal('window', 'click', (evt: Event) =>
{
observer.next(evt);
})
});
clickEvent.subscribe(() => console.log('window click received'));
}
}