如何在定义时 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' 中。由于订阅,每个订阅实例都会获得新值。