にBehaviorSubjectに要素をバインド私は以下のように見える小さな共有角度サービスがあります。角度サービス
import {Injectable} from '@angular/core';
import {BehaviorSubject, Observable} from 'rxjs/Rx';
@Injectable()
export class SidebarService {
private _isOpen: BehaviorSubject<boolean> = new BehaviorSubject(false);
constructor() {
this._isOpen.subscribe(val => {
console.log(`isOpen: ${val}`);
});
}
public get isOpen() {
return this._isOpen.asObservable();
}
toggle() {
this._isOpen.next(!this._isOpen.getValue());
}
}
を私はビューの要素に.isOpen
プロパティをバインドしたいと思います。私は現在、ビューの結合を試みるために次のコードを使用しています:プロパティは、最初に結合され
<p>Sidebar State: {{sidebarService?.isOpen | async}}</p>
しかし、連続変化に対応していません。私が欲しいのはですサイドバー状態:は、サイドバーのtoggle()メソッドがサイドバーサービス内で呼び出されたときに更新されます。
アイデア?
私は問題はあなたが新しい 'Observable'たびに得ることができるということかもしれないと思いますゲッターが呼び出されます。あなたはあなたのコードを 'getIsOpen():Observable'に変更し、コンポーネントの初期化時に一度呼び出すことを試みましたか? –
私のコンストラクタに.asObservable呼び出しを移動しようとしました。私のSidebarServiceが複製されるようになりました。コンストラクタが2回発射しているのがわかります。サービスは共有されるはずです。 –
サービスを何回輸入しますか?そして、どこ ?例えば、共有モジュールではなく、一度だけインポートすることになっています。 – Maxime