在多个类的情况下,如何将装饰器应用于角度的类

时间:2018-03-21 03:59:27

标签: angular typescript angular-decorator

我们使用@decorator来定义类装饰器。

但是如果我们在同一个文件中有多个装饰器和多个类,那么装饰器如何映射到它们的类呢?

或者我们不能在同一个文件中使用多个装饰器?

1 个答案:

答案 0 :(得分:0)

  

或者我们不能在同一个文件中使用多个装饰器?

是的,您可以在同一个文件中使用多个装饰器。你甚至可以在同一个类声明中使用多个装饰器,见下文。

  

装饰器如何映射到他们的类?

装饰器实际上是一个功能。 映射到它旁边的声明

来自TypeScript Handbook - Decorator docs

  

装修

     

装饰器是一种特殊的声明,可以附加到   class declarationmethodaccessorpropertyparameter。   装饰者使用@expression形式,其中expression必须   计算将在运行时使用信息调用的函数   关于装饰宣言。

     

例如,鉴于装饰者@sealed,我们可能会写sealed   功能如下:

function sealed(target) {
    // do something with 'target' ...
}

因此,您再次可以在一个文件中包含多个装饰器,并将它们应用于class declarationmethodaccessor,{{3} },或旁边的property

Runnable Demo

作为一个可运行的演示总是受欢迎,这是一个。

在下面的代码中,每个装饰器将为它装饰的每个类打印一条消息。如您所见,单个类,多个类的多个装饰器都在一个文件中。

function MyDecoratorOne(target) {
  console.log('MyDecoratorOne decorating class: ' + target.name);
}
function MyDecoratorTwo(target) {
  console.log('MyDecoratorTwo decorating class: ' + target.name);
}

@MyDecoratorOne
@MyDecoratorTwo
class Aaa {
  aaaMethod() {}
}

@MyDecoratorOne
@MyDecoratorTwo
class Bbb {
  bbbMethod() {}
}

输出:

MyDecoratorTwo decorating class: Aaa
MyDecoratorOne decorating class: Aaa
MyDecoratorTwo decorating class: Bbb
MyDecoratorOne decorating class: Bbb

parameter