如何在定义时 return 具有可观察值的值?
How to return a value with observable when it becomes defined?
我想知道是否有办法在 sessionStorage.getItem('currentuser')
周围包装一个可观察对象,以便调用代码可以订阅并仅在 sessionStorage
中设置后获取值
这可能吗?
阿南德
当然可以。您可以使用 Service
以这种方式解决
import {Subject} from 'rxjs/Subject';
import {Observable} from 'rxjs/Observable';
@Injectable()
export class StorageService {
private storageAlert: Subject<any> = new Subject('');
private propagationIsBlocked: false;
// use this blocker for option 3
blockPropagation(): void {
propagationIsBlocked = true;
}
// use this unblocker for option 3
unblockPropagation(): void {
propagationIsBlocked = false;
}
// subscribe to this method in order to get updated whenever a change happens
getValue(): Observable<any> {
return this.storageAlert.asObservable();
}
// trigger the update << option1
setValue(value: any) {
if(value){
this.sessionStorage.setItem('key', 'value');
this.storageAlert.next(value);
}
}
// trigger the update << option2
setValue(value: any) {
if(value && value.id !== storageAlert.getValue().id){
this.sessionStorage.setItem('key', 'value');
this.storageAlert.next(value);
}
}
// trigger the update << option3
setValue(value: any) {
if(!this.propagationIsBlocked){
this.sessionStorage.setItem('key', 'value');
this.storageAlert.next(value);
}
}
}
但老实说,如果您使用此服务,则不需要 sessionStorage 或 localStorage,因为该值已存储在服务的变量 'storageAlert' 中。由于订阅,每个订阅实例都会获得新值。
我想知道是否有办法在 sessionStorage.getItem('currentuser')
周围包装一个可观察对象,以便调用代码可以订阅并仅在 sessionStorage
这可能吗?
阿南德
当然可以。您可以使用 Service
以这种方式解决import {Subject} from 'rxjs/Subject';
import {Observable} from 'rxjs/Observable';
@Injectable()
export class StorageService {
private storageAlert: Subject<any> = new Subject('');
private propagationIsBlocked: false;
// use this blocker for option 3
blockPropagation(): void {
propagationIsBlocked = true;
}
// use this unblocker for option 3
unblockPropagation(): void {
propagationIsBlocked = false;
}
// subscribe to this method in order to get updated whenever a change happens
getValue(): Observable<any> {
return this.storageAlert.asObservable();
}
// trigger the update << option1
setValue(value: any) {
if(value){
this.sessionStorage.setItem('key', 'value');
this.storageAlert.next(value);
}
}
// trigger the update << option2
setValue(value: any) {
if(value && value.id !== storageAlert.getValue().id){
this.sessionStorage.setItem('key', 'value');
this.storageAlert.next(value);
}
}
// trigger the update << option3
setValue(value: any) {
if(!this.propagationIsBlocked){
this.sessionStorage.setItem('key', 'value');
this.storageAlert.next(value);
}
}
}
但老实说,如果您使用此服务,则不需要 sessionStorage 或 localStorage,因为该值已存储在服务的变量 'storageAlert' 中。由于订阅,每个订阅实例都会获得新值。