我有观察者,它存储一些DOM
元素树的样式。
另外,我有很多输入,我可以改变这种风格。
<input
type="text"
[value]="elementData.getSpecificStyle('elementClassName', 'background')"
(keyup)="elementData.setSpecificStyle('elementClassName', 'background', $event.target.value)"
>
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;
更简单的事情?
答案 0 :(得分:1)
当styles
是可观察的时候,这是不可能的。 Observables按设计方式工作。当一个可用时,它们会推送一个值。
如果您不想使用subscribe
,则需要更改styles
以不返回可观察对象。