扩展角度装饰器

时间:2017-01-26 13:55:13

标签: angular typescript decorator

我想制作一个可以做某事或其他事情的自定义装饰器,然后调用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。

0 个答案:

没有答案