如何立即从观察者那里获得价值?

时间:2016-02-28 11:30:44

标签: angular rxjs

我有观察者,它存储一些DOM元素树的样式。

另外,我有很多输入,我可以改变这种风格。

<input
    type="text"
    [value]="elementData.getSpecificStyle('elementClassName', 'background')"
    (keyup)="elementData.setSpecificStyle('elementClassName', 'background', $event.target.value)"
>

StylesService

public setStyle (clazz: string, styleName: string, styleValue: string): void {
    if (!this._styles[clazz]) {
        this._styles[clazz] = {};
    }

    this._styles[clazz][styleName] = styleValue;

    this.stylesSubject.next(this._styles);
}

private getSpecificStyle (clazz: string, styleName: string): string {
    let result: string = '';

    this.styles.subscribe((styles: Observable<Object>) => {
        result = styles[clazz][styleName];
    });

    return result;
}

观察者内部的所有样式,所以,当我想将一些样式值作为输入值时 - 我需要在getSpecificStyle方法中订阅观察者。

这是正常的,当我可以异步获取样式时,但在那种情况下我只想立即从观察者获取当前值。

此代码工作正常,但我想知道,有任何方法可以替换该代码

let result: string = '';

this.styles.subscribe((styles: Observable<Object>) => {
   result = styles[clazz][styleName];
});

return result;

更简单的事情?

1 个答案:

答案 0 :(得分:1)

styles是可观察的时候,这是不可能的。 Observables按设计方式工作。当一个可用时,它们会推送一个值。 如果您不想使用subscribe,则需要更改styles以不返回可观察对象。