Dalam aplikasi Angular, observable biasanya digunakan untuk menstrim data antara komponen dan perkhidmatan. Soalan biasa yang timbul ialah bagaimana untuk mendapatkan semula nilai semasa yang boleh diperhatikan tanpa melanggannya.
Dalam kod yang disediakan, perkhidmatan SessionStorage menggunakan Subjek bernama _isLoggedInSource untuk mengeluarkan keadaan log masuk semasa. Walaupun sifat isLoggedIn mendedahkan yang boleh diperhatikan ini, ia tidak mempunyai konsep nilai semasa.
Penyelesaian kepada masalah ini terletak pada penggunaan BehaviorSubject dan bukannya Subjek. BehaviorSubject menjejaki nilai yang dikeluarkan terbaharu dan memancarkannya serta-merta kepada pelanggan baharu.
<code class="typescript">import {BehaviorSubject} from 'rxjs/BehaviorSubject'; @Injectable() export class SessionStorage extends Storage { private _isLoggedInSource = new BehaviorSubject<boolean>(false); isLoggedIn = this._isLoggedInSource.asObservable(); constructor() { super('session'); } setIsLoggedIn(value: boolean) { this.setItem('_isLoggedIn', value, () => { this._isLoggedInSource.next(value); }); } }</code>
Kini, anda boleh mendapatkan semula keadaan log masuk semasa menggunakan kaedah getValue() BehaviorSubject:
<code class="typescript">isLoggedIn = sessionService._isLoggedInSource.getValue();</code>
Dengan menggunakan BehaviorSubject, anda boleh mengakses nilai semasa yang boleh diperhatikan walaupun tanpa melanggannya. Ini amat berguna apabila anda perlu membaca nilai yang dikeluarkan terkini pada titik tertentu dalam kod anda.
Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Nilai Semasa Subjek RxJS atau Boleh Diperhatikan dalam Sudut?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!