-->

什么是AngularJS指令?(What is an AngularJS directive?)

2019-07-05 07:20发布

我花了相当多的时间,通过AngularJS文档和几个教程读书,我一直在文档如何难以接近颇为惊喜。

我有一个简单,回答的问题,也可能是给别人看拿起AngularJS有用:

什么是AngularJS指令?

应该有一个指令某处的简单,精确的定义,但AngularJS网站提供了这些令人惊讶的无用的定义:

在主页上 :

指令是AngularJS提供一个独特而强大的功能。 指令让你创造新的HTML语法,特定于应用程序。

在开发者文档 :

指令是教HTML新花样的方式。 DOM在编译指令对HTML匹配和执行。 这使得指令进行注册的行为,或转换DOM。

并有一系列会谈的有关指令,在此,讽刺的是,似乎认为观众已经明白它们是什么。

会有人能够提供的,清晰的参考,一个什么样的指令是解释一个准确的定义:

  1. 它是什么(看到清澈的jQuery的定义为例)
  2. 什么实际问题和情况下,它旨在解决
  3. 它体现了什么样的设计模式,或者它如何融入声称的MVC / MVW AngularJS的使命。

Answer 1:

它是什么(见的jQuery的明确定义为例)?

一个指令本质上是一个功能当角编译器发现在DOM执行。 该功能的可以做几乎所有的东西,这就是为什么我认为这是相当困难的定义指令是什么。 每个指令有一个名称(如NG重复,标签,化妆你自己),并且每个指令决定了它可以用于:元素,属性,等级,在注释中。

一个指令通常只有一个(后)链接功能。 一个复杂的指令可以有一个编译功能,预链接功能和链接后的功能。

什么实际问题和情况是它旨在解决?

最强大的东西指令可以做的是扩展HTML。 你的扩展是一个领域特定语言构建应用程序(DSL)。 例如,如果你的应用程序运行的在线购物网站,你可以扩展HTML有“购物推车”,“优惠券”,“特价”等指令 - 无论文字或物体或概念更自然地内用“网上购物”领域,而不是‘格’S和‘跨度’S(如@WTK已经提到)。

指令还可以组件化HTML - 组一堆HTML成一些可重用的组件。 如果你发现自己使用NG-包括大量的HTML的拉动,它可能是一次重构到指令。

它体现了什么样的设计模式,或者它是如何融入angularjs的本意是MVC / MVW使命

指令是在那里你操作DOM并赶上DOM事件。 这就是为什么该指令的编译和链接功能都收到了“元素”作为参数。 您可以

  • 定义一串HTML(即模板),以取代指令
  • 事件绑定到这个元素(或其子女)
  • 添加/删除类
  • 更改文本()值
  • 监视更改在同一元件中定义的属性(实际上它是被观看的属性的值 - 这些范围的特性,因此该指令手表‘模型’更改)
  • 等等


在HTML中,我们有东西像<a href="..."><img src="..."><br><table><tr><th> 。 你会如何描述,HREF,IMG SRC,BR,表,TR和TH是什么? 这是一个指令是什么。



Answer 2:

也许对角指令一个非常简单的和最初的定义是

AngularJS指令(A-指令)是HTML带有前缀(模型,应用程序,重复,结合)通过使用角延伸到HTML属性。 ( 来源:W3Schools的角教程 )

其中一些例子是

NG-应用指令定义的AngularJS应用。

NG-模型指令结合HTML控件的应用程序数据中的值(输入,选择,文本区域)。

NG-绑定指令的应用程序数据绑定到HTML视图。

<div ng-app="">
    <p>Name: <input type="text" ng-model="name"></p>
    <p ng-bind="name"></p>
</div>

检查本教程中,至少对我来说是最好的介绍给角之一。 更完整的方法是一切@标记rajcok前说。



Answer 3:

综观文件,指令都可以编写angularjs以创建您使用任意节点和伪javascript和占位符的组合对象和behaviors.In换句话说,它是一个模板,数据表达的意图如何结构解析你的widget(构件)的结构,它的行为和它是如何养活数据。 Angularjs然后针对这些指令运行,将其转化为工作的HTML / JavaScript代码。

指令是在那里,所以你使用正确的语义可以构建更复杂的组件(部件)。 只要看一看指令的angularjs例子 - 他们定义选项卡窗格(这当然不是有效的常规HTML格式)。 这比使用像DIV-S或跨度创建结构,然后将其风格看起来像一个标签窗格更加直观。



Answer 4:

在AngularJS指令是HTML重新对HTML DOM元素标记就像一个属性(restrict- A),元素名称(restrict- E),评论(restrict- M)或CSS类(限制 - C),告诉AngularJS的HTML编译器($编译)来执行指定的行为到DOM元素或甚至变换的DOM元素和它的实施例children.Some是NG-绑定,NG-隐藏/显示等



Answer 5:

该网页是关于这个非常明确:当鼠标悬停在最后一节的标签:

我们已经扩展HTML的词汇用自定义tabs元素。 该tabs抽象必要的渲染选项卡的复杂的HTML结构和行为。 其结果是一个更可读的视图和非常容易地可重复使用的语法“。

那么在接下来的标签:

angular.module('components', []).
  directive('tabs', function() {
    return {
      restrict: 'E',
      transclude: true,
      scope: {},
      controller: function($scope, $element) {
        var panes = $scope.panes = [];

        $scope.select = function(pane) {
          angular.forEach(panes, function(pane) {
            pane.selected = false;
          });
          pane.selected = true;
        }

所以,你可以创造HTML元素,即tabs ,让角处理这些元素的表现。



文章来源: What is an AngularJS directive?