Mendapatkan Nilai Semasa Subjek RxJS atau Boleh Diperhatikan
Dalam aplikasi Sudut, adalah perkara biasa untuk menggunakan subjek atau boleh diperhatikan untuk perkongsian data dan komunikasi. Walau bagaimanapun, tidak seperti pembolehubah, subjek dan pemerhatian tidak secara intrinsik memegang nilai semasa. Apabila mereka memancarkan nilai, nilai itu segera diserahkan kepada pelanggan dan yang boleh diperhatikan menyelesaikan tugasnya.
Senario:
Andaikan anda mempunyai subjek isLoggedIn dalam perkhidmatan Angular yang mewakili status log masuk pengguna. Anda mahu komponen lain mendapatkan semula status log masuk semasa tanpa melanggan isLoggedIn observable.
Penyelesaian:
Untuk menangani perkara ini, RxJS menawarkan BehaviorSubject, yang direka khusus untuk memberikan nilai semasa. Tidak seperti subjek dan boleh diperhatikan, BehaviorSubject mengingat nilai terakhir yang dipancarkan dan serta-merta memancarkannya kepada pemerhati yang baru dilanggan.
Pelaksanaan:
Untuk menggunakan BehaviorSubject, anda boleh mengubah suai anda Perkhidmatan SessionStorage sebagai berikut:
@Injectable() export class SessionStorage extends Storage { private _isLoggedInSource = new BehaviorSubject<boolean>(false); // Initialize with a default value isLoggedIn = this._isLoggedInSource.asObservable(); constructor() { super('session'); } setIsLoggedIn(value: boolean) { this.setItem('_isLoggedIn', value, () => { this._isLoggedInSource.next(value); }); } }
Dalam komponen anda, anda boleh mendapatkan semula status log masuk semasa menggunakan kaedah getValue() bagi BehaviorSubject:
import {SessionStorage} from 'app/services/session-storage.service'; ... const sessionStorage = new SessionStorage(); const isLoggedIn = sessionStorage.isLoggedInSource.getValue();
Dengan menggunakan BehaviorSubject, anda mempunyai mekanisme untuk dapatkan nilai semasa subjek isLoggedIn anda tanpa bergantung pada langganan, memberikan fleksibiliti yang lebih besar dalam reka bentuk aplikasi dan data anda pengendalian.
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!