为什么Angular 2使用装饰器?

Neo*_*Neo 10 decorator angular-decorator angular

我刚开始使用Angular 2,并想知道为什么有些属性喜欢selectortemplate放在组件装饰器而不是组件类中.

在Angular 2中使用所有这些装饰器有什么意义?

Gün*_*uer 5

  • 使工具可以轻松地在模板中提供各种支持,例如:

    • 错误检查
    • 自动完成
    • 图形用户界面设计师
  • 从装饰器生成代码,允许:

    • 更明确地定义一些东西或
    • 根据某些配置生成不同的代码(就像即将推出的离线模板编译器那样)

需要执行代码才能使用表达式可能发出的结果。装饰器可以很容易地静态评估,而无需执行 TypeScript 代码(除了一个简单且有限的子集)。


Har*_*inh 5

除了已经存在的特定于平台的答案之外,我还想从一个更通用的视角进行讨论.从我的观点来看,这个问题在某种程度上与选择装饰模式而非继承的决定有关(例如@Componentvs extends Component)

使用装饰器的一些好处是:

1.关注点分离:

装饰器内部的信息是声明性的,它们定义了类的行为,很可能不会随着时间的推移而改变并被框架使用.类属性和字段是特定于类的数据,将始终处理和频繁更新,并且只在类本身内有意义.这两种数据不应混合在一起.

2.支持多种修改

由于Diamond问题,许多语言都会阻止多重继承.另一方面,一个类可以有多个装饰器用于不同的目的(例如@Component,不推荐使用@RouteConfig)

  • 我真的不买第二个论点。在 Angular2 的什么地方使用装饰器可以缓解多重继承问题?是的,装饰器非常适合用元数据标记类。但是他们像类/类型声明一样使用它们。组件类/类型总是用 \@Component 修饰。模块总是带有 \@NgModule,并且将 \@Component 放在逻辑组件类等之外的任何东西上都是没有意义的。恕我直言,这是一个可疑的设计决定。并不是说没有优势 - 与任何事情一样。 (2认同)