我花了相当多的时间,通过AngularJS文档和几个教程读书,我一直在文档如何难以接近颇为惊喜。
我有一个简单,回答的问题,也可能是给别人看拿起AngularJS有用:
什么是AngularJS指令?
应该有一个指令某处的简单,精确的定义,但AngularJS网站提供了这些令人惊讶的无用的定义:
在主页上 :
指令是AngularJS提供一个独特而强大的功能。 指令让你创造新的HTML语法,特定于应用程序。
在开发者文档 :
指令是教HTML新花样的方式。 DOM在编译指令对HTML匹配和执行。 这使得指令进行注册的行为,或转换DOM。
并有一系列会谈的有关指令,在此,讽刺的是,似乎认为观众已经明白它们是什么。
会有人能够提供的,清晰的参考,一个什么样的指令是解释一个准确的定义:
- 它是什么(看到清澈的jQuery的定义为例)
- 什么实际问题和情况下,它旨在解决
- 它体现了什么样的设计模式,或者它如何融入声称的MVC / MVW AngularJS的使命。
它是什么(见的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是什么? 这是一个指令是什么。
也许对角指令一个非常简单的和最初的定义是
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前说。
综观文件,指令都可以编写angularjs以创建您使用任意节点和伪javascript和占位符的组合对象和behaviors.In换句话说,它是一个模板,数据表达的意图如何结构解析你的widget(构件)的结构,它的行为和它是如何养活数据。 Angularjs然后针对这些指令运行,将其转化为工作的HTML / JavaScript代码。
指令是在那里,所以你使用正确的语义可以构建更复杂的组件(部件)。 只要看一看指令的angularjs例子 - 他们定义选项卡窗格(这当然不是有效的常规HTML格式)。 这比使用像DIV-S或跨度创建结构,然后将其风格看起来像一个标签窗格更加直观。
在AngularJS指令是HTML重新对HTML DOM元素标记就像一个属性(restrict- A),元素名称(restrict- E),评论(restrict- M)或CSS类(限制 - C),告诉AngularJS的HTML编译器($编译)来执行指定的行为到DOM元素或甚至变换的DOM元素和它的实施例children.Some是NG-绑定,NG-隐藏/显示等
该网页是关于这个非常明确:当鼠标悬停在最后一节的标签:
我们已经扩展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
,让角处理这些元素的表现。