我想知道是否有办法在sessionStorage.getItem('currentuser')
周围包装一个observable,因此调用代码只能在sessionStorage
这可能吗?
阿南德
答案 0 :(得分:1)
当然可以。您可以通过服务
以这种方式解决它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”中。每个订阅实例都会因订阅而获得新值。