角度1.5的组件和指令

sjo*_*ten 7 javascript angularjs angularjs-directive

Angular 1.5的重大变化是围绕组件的支持.

component('myComponent', {
  template: '<h1>Hello {{ $ctrl.getFullName() }}</h1>',
  bindings: { firstName: '<', lastName: '<' },
  controller: function() {
    this.getFullName = function() {
      return this.firstName + ' ' + this.lastName;
    };
  }
});
Run Code Online (Sandbox Code Playgroud)

虽然这一切都很好,但我不确定这与指令有什么不同.使用components传统自定义指令有什么好处?Angular 1.5和Angular 2中的组件是否相同?

rze*_*lek 2

现在这.component是编写代码的首选方式,因为它有利于良好的实践,并使开发人员能够像 Angular 2 一样编写代码(类似于 Web 组件)。基本上,当您使用 编写代码时component,升级到 Angular 2 会更容易。功能几乎保持不变。如果可能的话,您应该.component 始终使用。

变化(摘录)

  • 组件是使用对象而不是函数来声明的
  • binding使用属性简化隔离范围
  • 组件始终具有隔离的范围
  • 一些不好的做法是不可能的
  • 更简单、更容易理解的配置
  • 生命周期挂钩:( $onInit(), $onChanges(changesObj), $doCheck(), $onDestroy(), $postLink())

很棒的文章在这里: https ://toddmotto.com/exploring-the-angular-1-5-component-method

何时不使用组件(来自文档):

  • 对于需要在编译和预链接函数中执行操作的指令,因为它们不可用
  • 当您需要高级指令定义选项(例如优先级、终端、多元素)时
  • 当您想要由属性或 CSS 类而不是元素触发的指令时。

我相信,您能找到的最好的描述是官方指南: https: //docs.angularjs.org/guide/component。它涵盖了所有变更、变更原因,并让您深入了解组件。

编辑 01-2020:

至少一年以来我不再处理 ng1 代码

在撰写回复时(01-2017),他们将在大多数情况下替换指令的印象是正确的。我从2017年6月的答案中删除了“替换”一词,因为它在当时确实具有误导性。然而,从 1.5 开始,如果可能的话,您仍然应该更喜欢组件而不是指令。

实际上,您应该根本不使用 AngularJS。现在处于 LTS 阶段,基本上只会修复错误。没有新功能。此外,LTS 将于 2021 年 7 月 1 日结束。 https://docs.angularjs.org/misc/version-support-status#long-term-support

附言。使用组件而不是指令使得代码将来更容易移植到 ngx。