【发布时间】:2016-10-30 09:38:57
【问题描述】:
我刚开始使用 Angular 2,想知道为什么像 selector 和 template 这样的属性放在组件装饰器中而不是组件类中。
在 Angular 2 中使用所有这些装饰器有什么意义?
【问题讨论】:
标签: angular decorator angular-decorator
我刚开始使用 Angular 2,想知道为什么像 selector 和 template 这样的属性放在组件装饰器中而不是组件类中。
在 Angular 2 中使用所有这些装饰器有什么意义?
【问题讨论】:
标签: angular decorator angular-decorator
使工具能够轻松地在模板中提供各种支持,例如:
从装饰器生成代码,允许:
需要执行代码才能使用表达式可能发出的结果。无需执行 TypeScript 代码即可轻松地静态评估装饰器(除了可能是一个简单且有限的子集)。
【讨论】:
除了已经存在的特定于平台的答案之外,我还想从更通用的角度来回答。在我看来,这个问题在某种程度上与选择装饰器模式而不是继承的决定有关(例如@Component vs extends Component)
使用装饰器的一些好处是:
1.关注点分离:
装饰器中的信息是声明性的,它们定义了一个类的行为,很可能不会随着时间的推移而改变,并被框架使用。类属性和字段是特定于类的数据,将始终被处理和频繁更新,并且仅在类本身内有意义。这两种数据不应该混在一起。
2。支持多种修改
由于Diamond problem,许多语言会阻止多重继承。另一方面,一个类可以有多个用于不同目的的装饰器(例如@Component 和已弃用的@RouteConfig)
【讨论】:
通常,装饰器允许您执行函数。例如@Component 执行从Angular2 导入的Component 函数。在底层,这样的装饰器在类上定义了一些元数据。这允许您配置类以将其“标记”为组件。然后,Angular2 能够将模板中的选择器链接到此类。
这篇文章可以为您提供更多关于幕后发生的事情的提示:
您可以注意到装饰器可以在不同级别(类、类属性、方法参数)在 TypeScript 中应用。
【讨论】:
在 Angular 中,我们为组件、服务、指令等所有内容创建类
那么,角度编译器如何编译您的代码并将其转换为可以在浏览器中运行的脚本?这是因为装饰器。简而言之,您可以说装饰器允许您将元数据与 typescript 类一起使用,angular 可以使用该类知道该类是组件、指令还是模块等。
【讨论】:
Decorator 将一个类标记为 Angular 组件,并提供配置来确定组件在运行时应如何处理、实例化和使用。它提供了各种配置选项,例如选择器、模板Url、模板、样式Urls、样式、提供程序等。
【讨论】: