为什么 Angular 2 使用装饰器?
Why does Angular 2 use decorators?
我刚开始使用 Angular 2 并且想知道为什么像 selector
和 template
这样的属性放在组件装饰器中而不是组件 类.
在 Angular 2 中使用所有这些装饰器有什么意义?
使工具可以轻松地在模板中提供各种支持,例如:
- 错误检查
- 自动完成
- 图形 GUI 设计师
从装饰器生成代码,允许:
- 更明确地定义一些东西或
- 根据某些配置生成不同的代码(就像
即将推出的 离线模板编译器所做的那样)
需要执行代码才能使用表达式可能发出的结果。无需执行 TypeScript 代码即可轻松静态评估装饰器(可能是简单且有限的子集除外)。
一般来说,装饰器允许你执行函数。例如 @Component
执行从 Angular2 导入的 Component
函数。在幕后,此类装饰器在 class 上定义了一些元数据。这允许您将 class 到 "flag" 配置为一个组件。然后 Angular2 能够 link 模板中的选择器到这样的 class.
这篇文章可以为您提供更多关于幕后情况的提示:
您会注意到装饰器可以在不同级别(class、class 属性、方法参数)应用到 TypeScript 中。
除了已经存在的特定于平台的答案之外,我还想从更通用的角度参与进来。在我看来,这个问题在某种程度上与选择装饰器模式而不是继承的决定有关(例如 @Component
vs extends Component
)
使用装饰器的一些好处是:
1.关注点分离:
装饰器中的信息是声明性的,它们定义了 class 的行为,很可能不会随时间改变并由框架使用。 Class 属性和字段是 class 特定的数据,将始终被处理并经常更新,并且仅在 class 本身内有意义。这两种数据不能混在一起。
2。支持多次修改
许多语言由于 Diamond problem 而阻止多重继承。另一方面,一个 class 可以有多个用于不同目的的装饰器(例如 @Component
和已弃用的 @RouteConfig
)
在 angular 中,我们为组件、服务、指令等所有内容创建 classes,
那么,angular 编译器如何编译您的代码并将其转换为可在浏览器中 运行 使用的脚本?发生这种情况是因为装饰器。简而言之,您可以说装饰器允许您使用打字稿 class 附加元数据,使用它 angular 知道 class 是组件、指令还是模块等。
Decorator 将 class 标记为 Angular 组件,并提供配置来确定组件在运行时应如何处理、实例化和使用。它提供了各种选项来配置它,例如选择器、templateUrl、模板、styleUrls、样式、提供程序等。
我刚开始使用 Angular 2 并且想知道为什么像 selector
和 template
这样的属性放在组件装饰器中而不是组件 类.
在 Angular 2 中使用所有这些装饰器有什么意义?
使工具可以轻松地在模板中提供各种支持,例如:
- 错误检查
- 自动完成
- 图形 GUI 设计师
从装饰器生成代码,允许:
- 更明确地定义一些东西或
- 根据某些配置生成不同的代码(就像
即将推出的离线模板编译器所做的那样)
需要执行代码才能使用表达式可能发出的结果。无需执行 TypeScript 代码即可轻松静态评估装饰器(可能是简单且有限的子集除外)。
一般来说,装饰器允许你执行函数。例如 @Component
执行从 Angular2 导入的 Component
函数。在幕后,此类装饰器在 class 上定义了一些元数据。这允许您将 class 到 "flag" 配置为一个组件。然后 Angular2 能够 link 模板中的选择器到这样的 class.
这篇文章可以为您提供更多关于幕后情况的提示:
您会注意到装饰器可以在不同级别(class、class 属性、方法参数)应用到 TypeScript 中。
除了已经存在的特定于平台的答案之外,我还想从更通用的角度参与进来。在我看来,这个问题在某种程度上与选择装饰器模式而不是继承的决定有关(例如 @Component
vs extends Component
)
使用装饰器的一些好处是:
1.关注点分离:
装饰器中的信息是声明性的,它们定义了 class 的行为,很可能不会随时间改变并由框架使用。 Class 属性和字段是 class 特定的数据,将始终被处理并经常更新,并且仅在 class 本身内有意义。这两种数据不能混在一起。
2。支持多次修改
许多语言由于 Diamond problem 而阻止多重继承。另一方面,一个 class 可以有多个用于不同目的的装饰器(例如 @Component
和已弃用的 @RouteConfig
)
在 angular 中,我们为组件、服务、指令等所有内容创建 classes,
那么,angular 编译器如何编译您的代码并将其转换为可在浏览器中 运行 使用的脚本?发生这种情况是因为装饰器。简而言之,您可以说装饰器允许您使用打字稿 class 附加元数据,使用它 angular 知道 class 是组件、指令还是模块等。
Decorator 将 class 标记为 Angular 组件,并提供配置来确定组件在运行时应如何处理、实例化和使用。它提供了各种选项来配置它,例如选择器、templateUrl、模板、styleUrls、样式、提供程序等。