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);
});
})
由于装饰器在组件实例的原型上工作,创建的变量完全相同。
我该如何解决这个问题?
如果无法用装饰器完成什么是一种优雅的替代方法?