プロパティデコレータを使用して、すべてのプロパティに対して静的ゲッタ/セッタを持つObservableを作成しています。最後に角度プロパティデコレータは、クラスタイプごとに1つのプロパティインスタンスしか作成しません。
あなたはデコレータの実際のコードは
export function ObservableProperty(defaultValue = null): any {
return (target, key, descriptor) => {
const accessor = `${key}$`;
target[accessor] = new BehaviorSubject(defaultValue);
return Object.assign({}, descriptor, {
get: function() {
return this[accessor].getValue();
},
set: function(value: any) {
this[accessor].next(value);
},
});
};
}
今、すべてがTest
コンポーネントの1つのインスタンスを正常に動作され、このように
class Test {
@ObservableProperty(DEFAULT_CATS)
cats: number;
@ObservableProperty(DEFAULT_PIGS)
pigs: number;
}
をデコレータを使用することができます。
しかし、2つのインスタンスでは、このテストは実際には失敗します。
デコレータはコンポーネントインスタンスのプロトタイプで動作するため、作成された変数はまったく同じものです。
この問題を回避するにはどうすればよいですか?
デコレータではできない場合は、何がエレガントな代替方法ですか?