【问题标题】:What are the main differences between components and directives in AngularJS 1.5?AngularJS 1.5 中组件和指令之间的主要区别是什么?
【发布时间】:2016-11-15 12:13:14
【问题描述】:

我发现很难理解组件和指令之间的真正区别。我现在明白组件是一个更简单的概念。

考虑到这一点,在使用 AngularJS 1.5 时是否有任何理由继续使用指令?

也许我在这里遗漏了真正的上下文,但似乎组件提供了更简单的 API。

那么我为什么要继续使用指令呢?

Angular 2 声明一切都是组件,因此努力从 1.5 轻松迁移到 2,以后只使用组件是否没有意义?

过去我使用指令来创建,例如,自动查找文本框,现在我没有理由不应该在组件中执行此操作,对吧?然后我可以在我创建的其他组件中重用这个组件?

【问题讨论】:

    标签: angularjs angular-directive


    【解决方案1】:

    只是复制 angular 文档,因为他们以我能想到的最佳方式进行了介绍。

    了解组件

    在 Angular 中,组件是一种特殊的指令,它使用 更简单的配置,适用于基于组件的 应用结构。

    这使得以类似于使用的方式编写应用程序变得更加容易 Web 组件或使用 Angular 2 的应用架构风格。

    组件的优点:

    • 比普通指令更简单的配置
    • 提倡合理的默认设置和最佳做法
    • 针对基于组件的架构进行了优化
    • 编写组件指令将更容易升级到 Angular 2

    何时不使用组件:

    • 对于依赖 DOM 操作的指令,添加事件监听器等,因为编译和链接函数是 不可用
    • 当您需要优先级、终端、多元素等高级指令定义选项时
    • 当您需要由属性或 CSS 类而不是元素触发的指令时

    更多阅读:https://docs.angularjs.org/guide/component

    【讨论】:

    • 如果你能提到差异就太好了:)
    【解决方案2】:

    受本文(Angular 2: The Difference Between Components and Directives) 的启发,我将尝试使用高层次的视角进行解释。它说的是 Angular 2,但在 AngularJs 上下文中也很有用。

    指令

    在计算机科学中有“Directive Pragma”的概念。根据维基百科:

    “在计算机编程中,指令编译指示(来自“pragmatic”)是一种语言结构,它指定编译器(或汇编器或解释器)应如何处理其输入。指令不是语言本身的一部分”

    这与 AngularJS 文档给出的描述非常吻合:

    “在高层次上,指令是 DOM 元素(例如属性、元素名称、注释或 CSS 类)上的标记,它告诉 AngularJS 的 HTML 编译器($compile)将指定的行为附加到该 DOM 元素(例如通过事件监听器),甚至转换 DOM 元素及其子元素。”

    所以,指令的基本作用是向(Angular)编译器发出指令,以改变 DOM 或其行为。

    组件

    AngularJS 中的组件是一个特殊的指令;正如 AngularJS 文档所述,他们试图模仿 Web 组件:

    在 AngularJS 中,组件是一种特殊的指令,它使用更简单的配置,适用于基于组件的应用程序结构。

    这使得以类似于使用 Web 组件或使用新的 Angular 应用程序架构风格的方式编写应用程序变得更加容易。

    什么时候用什么?

    就我个人而言,除非有充分的理由不使用,否则我会使用组件。

    AngularJS 组件文档中给出了其中一些原因:

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

    另一种说法:

    指令是我们可以将行为附加到 DOM 中的元素的机制。

    组件是一种特定类型的指令,它可以利用 Web 组件功能 - 封装的、可重用的元素在我们的整个应用程序中可用。

    可能的结论

    一旦您了解组件是指令,我认为问题并不是那么好。这两个概念并不是试图解决同一个问题。组件是一个扩展,它允许使用指令来构建基于组件的 Web 应用程序。

    更深入

    Todd Motto 在这个小GIST 中分享他对这个主题的了解。

    指令装饰 DOM,添加行为并扩展现有 DOM。使用 .component() 时创建 DOM,使用 .directive() 时装饰 DOM,这就是心态

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-22
      • 2015-08-06
      • 2011-03-06
      • 2013-12-23
      • 2017-04-28
      • 2011-04-14
      • 2010-09-17
      • 2021-11-30
      相关资源
      最近更新 更多