AngularJS 指令
AngularJS 指令是扩展的 HTML 属性,带有前缀 ng-。
ng-app 指令初始化一个 AngularJS 应用程序。
ng-init 指令初始化应用程序数据。
ng-model 指令把元素值(比如输入域的值)绑定到应用程序。
ng-app 指令
ng-app 指令定义了 AngularJS 应用程序的 根元素。
ng-app 指令在网页加载完毕时会自动引导(自动初始化)应用程序。
稍后您将学习到 ng-app 如何通过一个值(比如 ng-app="myModule")连接到代码模块。
ng-init 指令
ng-init 指令为 AngularJS 应用程序定义了 初始值。
通常情况下,不使用 ng-init。您将使用一个控制器或模块来代替它。
稍后您将学习更多有关控制器和模块的知识。
ng-model 指令
ng-model 指令 绑定 HTML 元素 到应用程序数据。
ng-model 指令也可以:
为应用程序数据提供类型验证(number、email、required)。
为应用程序数据提供状态(invalid、dirty、touched、error)。
为 HTML 元素提供 CSS 类。
绑定 HTML 元素到 HTML 表单。
ng-repeat 指令
ng-repeat 指令对于集合中(数组中)的每个项会 克隆一次 HTML 元素。
创建自定义的指令
除了 AngularJS 内置的指令外,我们还可以创建自定义指令。
你可以使用 .directive 函数来添加自定义的指令。
要调用自定义指令,HTML 元素上需要添加自定义指令名。
使用驼峰法来命名一个指令, runoobDirective, 但在使用它时需要以 - 分割, runoob-directive:
<body ng-app="myApp"> <runoob-directive></runoob-directive> <script> var app = angular.module("myApp", []); app.directive("runoobDirective", function() { return { template : "<h1>自定义指令!</h1>" }; }); </script> </body>
可以通过以下方法调用指令
元素名 <runoob-directive></runoob-directive>;
属性 <div runoob-directive></div>;
类名 <div class="runoob-directive"></div>;
注释 <!--directive:runoob-directive-->;
限制使用
你可以限制你的指令只能通过特定的方式来调用。
var app = angular.module("myApp", []); app.directive("runoobDirective", function() { return { restrict : "A", template : "<h1>自定义指令!</h1>" }; });
通过添加 restrict 属性,并设置只值为 "A", 来设置指令只能通过属性的方式来调用.如果设置值为"AC",则是通过属性和类名来调用指令。
restrict值可以是下面几种:
E作为元素名使用
A作为元属性使用
C作为元类名使用
M作为元注释使用
ng-style 可以使用一个结构直接来表示当前节点的样式:
<div ng-style="{wwidth:100,height:100,background:'red'}"></div>
ng-class 直接设置当前节点的类,配合数据绑定作用很大
<div ng-controller="textCtrl" ng-class="cla"></div>
ng-class-even 和ng-class-odd是和ng-repeat配合使用的
<ul ng-init="l=[1,2,3,4]"> <li ng-class-odd="odd" ng-class-even="even" ng-repeat="m in l">{{m}}</li> </ul>
ng-show ng-hide 显示和隐藏 ng-switch 根据一个值来决定那个节点显示,其它移除
<div ng-init="a=2">
<ul ng-switch on="a">
<li ng-switch-when="1">1</li>
<li ng-switch-when="2">2</li>
<li ng-switch-default>other</li>
</ul>
</div>
ng-src控制src属性
<img ng-src="{{'h'+'ead,png'}}"/>
ng-href控制href属性
<a ng-href="{{'#'+'123'}}">here</a>
ng-form
起初不明白为什么会有个表单指令,<form>标签感觉也够用啊。
以表单验证为例,
<input type="submit" ng-disabled="mainForm.$invalid" />
也就是表单的状态为$invalid时禁用提交按钮。
如果场景再稍微复杂一点点,比如一个父表单中有多个子表单,子表单中有3个验证通过时父表单便可以提交。
但是,<form>是不可以嵌套的。
考虑到这种场景,我们便使用ng-form指令来解决这一问题。
<form name="mainForm" novalidate>
<div ng-form="form1">
姓名:<input type="text" ng-required="true" ng-model="name"/><br>
证件号码:<input type="number" ng-minLength="15" ng-maxLength="18" ng-required="true" ng-model="idnum"/>
</div>
<br>
<div ng-form="form2">
监护人姓名:<input type="text" ng-required="true" ng-model="gname"/><br>
监护人证件号码:<input type="number" ng-minLength="15" ng-maxLength="18" ng-required="true" ng-model="gidnum"/>
</div>
<button ng-disabled="form1.$invalid && form2.$invalid">submit all</button>
</form>
ng-checked 选中状态
<input type="checkbox" ng-checked="someProperty" ng-init="someProperty = true" ng-model="someProperty">
ng-selected 被选中状态
<label>
<input type="checkbox" ng-model="isFullStack">
I'm Full Stack Engineer
</label>
<select>
<option>Front-End</option>
<option>Back-End</option>
<option ng-selected="isFullStack">Full Stack !!!</option>
</select>
ng-disabled 禁用状态
<textarea ng-disabled="1+1==2">1+1=?</textarea>
ng-multiple 多选状态
ng-readonly 只读状态
<input type="text" ng-readonly="stopTheWorld" value="stop the world after 3s"/>
.run(function($rootScope,$timeout){
$rootScope.stopTheWorld=false;
$timeout(function(){
$rootScope.stopTheWorld = true;
},3000)
})
ng-bind
ng-bind的行为和{{}}差不多,只是我们可以用这个指令来避免FOUC(Flash Of Unrendered Content),也就是未渲染导致的闪烁。
ng-cloak
ng-cloak也可以为我们解决FOUC。 ng-cloak会将内部元素隐藏,直到路由调用对应的页面。
ng-if
如果ng-if中的表达式为false,则对应的元素整个会从DOM中移除而非隐藏,但审查元素时你可以看到表达式变成注释了。
如果相进行隐藏,可以使用ng-hide。
上面的这是只是单向绑定(ng-model除外),即只是从数据到展示,不能反作用于数据。