我想制作一个可以做某事或其他事情的自定义装饰器,然后调用Angular的Input
装饰器,并使用如下:
@Component({
template: '<h1 class="name">{{name}}</h1>
})
export class MyComponent {
@CustomInput()
private name: string;
}
我设法定义了一个TypeScript装饰器来完成我想要的额外操作 - 这个问题是关于如何从其中调用Angular的内置装饰器。
export function CustomInput(inputName?: string) {
return function (prototype: any, memberName: string) {
// Create a default getter/setter property
var backingMember = '__backingMember_' + memberName;
var descriptor = {
get: function () {
return this[backingMember];
},
set: function (value) {
this[backingMember] = value;
}
};
// Make whatever changes I need for my custom Input here
...
// Try to call Angular's Input descriptor
Input(inputName)(prototype, memberName);
return descriptor;
};
}
这似乎有效,并且我在指定点进行的任何更改(例如向setter添加功能等)都可以正常工作。但是,Angular并不认识Input
。在查看Augury时,我没有看到所有其他内容列出的输入;当我尝试从其他组件中使用它时,它无法说输入不存在。
我在这里做错了什么?进入Input()
代码,它似乎被正确调用。
我正在使用Angular 2.4.4。