我刚刚开始使用Angular 2,并且想知道为什么像selector
和template
这样的属性被放在组件装饰器中而不是组件类中。
在Angular 2中使用所有这些装饰器有什么意义?
答案 0 :(得分:5)
除了已经存在的特定于平台的答案之外,我还希望从更通用的视角中获取。从我的观点来看,这个问题与选择装饰模式而不是继承的决定有关(例如@Component
vs extends Component
)
使用装饰器的一些好处是:
<强> 1。关注点分离:
装饰器内部的信息是声明性的,它们定义了类的行为,很可能不会随着时间的推移而改变并被框架使用。类属性和字段是特定于类的数据,将始终处理和频繁更新,并且只在类本身内有意义。这两种数据不应混合在一起。
<强> 2。支持多项修改
由于Diamond problem,许多语言都会阻止多重继承。另一方面,一个类可以有多个装饰器用于不同的目的(例如@Component
和不推荐的@RouteConfig
)
答案 1 :(得分:3)
使工具可以轻松地在以下模板中提供各种支持:
从装饰器生成代码,允许:
需要执行代码才能使用结果表达式可能会发出。可以在不执行TypeScript代码的情况下静态地评估装饰器(除了可能是简单且有限的子集)。
答案 2 :(得分:1)
通常,装饰器允许您执行函数。例如@Component
执行从Angular2导入的Component
函数。在引擎盖下,这样的装饰器在类上定义了一些元数据。这允许您将类配置为&#34;标记&#34;它作为一个组成部分。然后,Angular2能够将模板中的选择器链接到这样的类。
本文可以为您提供更多关于幕后内容的提示:
您可以注意到装饰器可以在不同级别的TypeScript中应用(类,类属性,方法参数)。
答案 3 :(得分:0)
在角度上,我们为所有组件(如组件,服务,指令,
)创建类那么,角度编译器如何编译您的代码并将其转换为可在浏览器中运行的脚本?这是由于装饰器而发生的。简而言之,可以说装饰器使您可以将Typescript类附加元数据,从而使angular知道该类是组件,指令还是模块等。
答案 4 :(得分:0)
Decorator 将一个类标记为一个 Angular 组件,并提供确定组件在运行时应该如何处理、实例化和使用的配置。它提供了各种选项来配置它,例如选择器、templateUrl、模板、styleUrls、样式、提供程序等。