2
我正在使用Property Decorator爲每個屬性創建一個具有靜態getter/setter的Observable。Angular Property Decorator只爲每個類類型創建一個屬性實例
最後,你可以使用裝飾用這種方式
class Test {
@ObservableProperty(DEFAULT_CATS)
cats: number;
@ObservableProperty(DEFAULT_PIGS)
pigs: number;
}
用於裝飾的實際代碼是
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
組件的一個實例。
但有兩個實例,這個測試實際上失敗了。
fdescribe('ObservableProperty Decorator',() => {
let test: Test;
let doppleganger: Test;
beforeEach(() => {
test = new Test();
doppleganger = new Test();
});
it('should create different observables for each props',() => {
expect(test['cats$'] === doppleganger['cats$']).toBe(false);
});
})
由於裝飾器在組件實例的原型上工作,創建的變量完全相同。
我該如何解決這個問題?
如果無法用裝飾器完成什麼是一種優雅的替代方法?