2017-06-16 114 views
1

我尝试使用装饰器添加一些方法或属性到注释类。添加类装饰器的类属性

这是我的装饰:

export default function Component(params) { 
    return function decorator(target) { 
     target.template = params.template; 
     console.log(target, params.template); 
    } 
} 

我用这种方式:

@Component({ 
    template: template 
}) 
export default class App {} 

但是,当我使用这个类:

app.template // undefined; 

任何想法?

+1

装饰者是*建议*(即实验)。它们不是ES6或任何其他版本的语言的一部分。 –

+1

是的,我不是。这是一个拼写错误。但你不帮我:) – Scandinave

+1

*“但你不帮我”*好吧,现在你可以在讨论装饰者时使用正确的上下文,而其他人会知道你的意思:) –

回答

2

您正在修改类对象本身,即

App.template // your template is here 

,你只是在这种情况下定义的App类的静态属性。

为了设置类实例的模板,你应该使用:

target.prototype.template = params.template; 

(很好的例子类实际上是在构造函数和基于原型的继承只是语法糖)。

此外,我认为this article关于组合mixins和装饰器可能会有所帮助。

+0

我不知道为什么我以前没有想过这个。感谢这是解决方案。我已经阅读过这篇文章。但我不明白我可以如何将参数传递给mixin? – Scandinave