什么是AngularJS指令?

我花了很多时间阅读AngularJS文档和几个教程,我对文档的难以接近感到非常惊讶。

我有一个简单的可回答的问题,对于希望获取AngularJS的其他人也可能有用:

什么是AngularJS指令?

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

在主页上:

指令是AngularJS中独有的强大功能。 指令让你发明新的HTML语法,特定于你的应用程序。

在开发者文档中:

指令是教导HTML新技巧的一种方法。 在DOM编译期间,指令会与HTML进行匹配并执行。 这允许指令注册行为或转换DOM。

具有讽刺意味的是,有一系列关于指令的讨论似乎假定观众已经了解它们是什么。

任何人都可以为清楚的参考提供一个准确的定义:指令是什么解释的:

  • 它是什么(以jQuery的明确定义为例)
  • 它打算解决哪些实际问题和情况
  • 它体现了什么样的设计模式,或者说它是如何适应AngularJS的声称的MVC / MVW使命的。

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

    指令本质上是一个函数†,当Angular编译器在DOM中找到它时执行该函数。 函数几乎可以做任何事情,这就是为什么我认为定义一个指令是什么非常困难的原因。 每个指令都有一个名称(比如ng-repeat,tabs,make-up-your-own),每个指令都可以决定它的使用位置:元素,属性,类。

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

    它打算解决哪些实际问题和情况?

    最强大的东西指令可以做的是扩展HTML。 您的扩展程序是用于构建应用程序的域特定语言(DSL)。 例如,如果您的应用程序运行在线购物网站,您可以扩展HTML以具有“购物车”,“优惠券”,“特价”等指令 - 无论单词或对象或概念在“在线购物“域名,而不是”div“和”span“(如@WTK已经提到的)。

    指令还可以组件化HTML - 将一堆HTML组成一些可重用的组件。 如果你发现自己使用ng-include引入大量的HTML,那么可能是重构指令的时候了。

    它包含什么样的设计模式,或者说它是如何适应angularjs的声称的MVC / MVW任务

    指令是您操纵DOM并捕获DOM事件的地方。 这就是为什么指令的编译和链接函数都接收“元素”作为参数的原因。 您可以

  • 定义一堆HTML(即模板)来替换指令
  • 将事件绑定到此元素(或其子元素)
  • 添加/删除一个类
  • 改变text()的值
  • 监视在同一元素中定义的属性的变化(实际上它是被监视的属性的值 - 这些是范围属性,因此该指令监视变化的“模型”)
  • 等等

  • 在HTML中,我们有诸如<a href="..."><img src="..."><br><table><tr><th> 。 你会如何描述什么是a,href,img,src,br,table,tr和th? 这是一个指令。


    也许一个非常简单的初始定义的角度指令会是

    AngularJS指令(ng-directives)是带有ng前缀(ng-model,ng-app,ng-repeat,ng-bind)的HTML属性,用于Angular扩展HTML。 (来自:W3schools角度教程)

    这将是一些例子

    ng-app指令定义了一个AngularJS应用程序。

    ng-model指令将HTML控件的值(input,select,textarea)绑定到应用程序数据。

    ng-bind指令将应用程序数据绑定到HTML视图。

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

    查看本教程,至少对我来说这是Angular最好的介绍之一。 更完整的方法将是@ mark-rajcok之前所说的一切。


    查看文档,指令是您可以编写的结构,以便创建对象和行为。angularjs可以解析这些结构。换句话说,它是一个模板,您可以在其中混合使用任意节点和伪javascript和占位符来表示数据的意图您的小部件(组件)是结构化的,它的行为如何以及它如何与数据一起提供。 然后Angularjs运行这些指令将它们转换为可用的html / javascript代码。

    指令在那里,所以你可以使用适当的语义来构建更复杂的组件(小部件)。 只要看一下指令的angularjs例子 - 它们正在定义标签窗格(这在常规HTML中当然不是有效的)。 它比直接使用div-s或span来创建结构更直观,然后将样式设计为标签窗格。

    链接地址: http://www.djcxy.com/p/89607.html

    上一篇: What is an AngularJS directive?

    下一篇: How do I make my AJAX content crawlable by Google?