不得不讚嘆,指令是ng最爲強大的功能之一,好吧,也能夠去掉之一,是最強大的功能。ng內置了許多自定義的指令,這避免了咱們本身去造輪子。同時,ng也提供了自定義指令的功能,可讓咱們的頁面元素標籤更加實例化。javascript
內置的指令不少,至少40-50個吧。咱們在學習的時候,有兩種思路,一種是先做題,遇到不會的就去問;還有一種就是先把書都看了,而後再作題。這兒呢,咱們就先介紹大概的類別,至於細節指令,咱們線下自我修行吧。css
(1)ng-apphtml
一個頁面僅能有第一個ng-app起做用,因此頁面最好是將ng-app寫到html根元素上,這樣全部的元素就都歸ng管啦。java
(2)ng-controllerbootstrap
一個頁面能夠有多個ng-controller,有一個Controller,也就意味着多了一個隔離區域。通常來講,Controller負責經過服務進行CRUD操做,並將數據或結果綁定在Controller的$scope上。app
(3)ng-modeldom
咱們在上一篇也見過這個指令,<input type=’textbox’ ng-model=’name’ />,此處的含義是:將Controller中$scope的name綁定到此元素上,若是此元素內容變化,則必然會修改$scope.name的值ssh
(4){{}}和ng-bindide
這倆指令功能相似,都是將Controller中$scope上的值(例如name)綁定到顯示元素上的。學習
二者的區別是:若是使用{{}},頁面在加載的瞬間,用戶有可能會看到還沒有綁定數據的源碼狀態,而ng-bind則不存在此問題。不過沒必要所以困擾,用哪一個均可以,也就是那麼一瞬間嗎。
hello,{{name}} <hr> hello,<span ng-bind='name'></span>
(1)ng-class
ng-class能夠設置爲{key:value}對象,當value爲真時,key所對應的樣式啓做用。
<!DOCTYPE html> <html ng-app="App"> <head> <script type="text/javascript" src="http://sandbox.runjs.cn/uploads/rs/394/xjz9g1bv/angular.js"></script> <script type="text/javascript"> var App = angular.module("App", []); App.controller("ctrl", function ($scope) { $scope.isbk=false; $scope.isft=false; }); </script> <style type='text/css'> .bkcolor { background-color:green; } .ftcolor { color:red; } </style> </head> <body> <div ng-controller ="ctrl"> <input type='checkbox' ng-model='isbk' />使用background <input type='checkbox' ng-model='isft'/>使用frontcolor <div ng-class='{bkcolor:isbk, ftcolor:isft}'> 測試 </div> </div> </body> </html>查看效果:
點擊這裏測試運行效果。
(2)ng-class-even,ng-class-odd
這兩個指令和ng-class相似,不過特殊之處是須要配合ng-repeat使用,代碼以下:
<!DOCTYPE html> <html ng-app="App"> <head> <script type="text/javascript" src="http://sandbox.runjs.cn/uploads/rs/394/xjz9g1bv/angular.js"></script> <script type="text/javascript"> var App = angular.module("App", []); App.controller("ctrl", function ($scope) { $scope.personList = [{ name:"張三", age:30 },{ name:"李四", age:40 },{ name:"王五", age:50 }]; }); </script> <style type='text/css'> .oddcolor { background-color:green; } .evencolor { background-color:red; } </style> </head> <body> <div ng-controller ="ctrl"> <table> <tr ng-repeat='person in personList' > <td>{{$index}}</td> <!--注意:此處爲字符串--> <td ng-class-odd="'oddcolor'" ng-class-even="'evencolor'">{{person.name}}</td> <td ng-class-odd="'oddcolor'" ng-class-even="'evencolor'">{{person.age}}</td> </tr> </table> </div> </body> </html>顯示效果:
點擊這裏查看效果。
(3)ng-style
只需給ng-style賦值給style的對象就ok,見代碼:
<!DOCTYPE html> <html ng-app="App"> <head> <script type="text/javascript" src="http://sandbox.runjs.cn/uploads/rs/394/xjz9g1bv/angular.js"></script> <script type="text/javascript"> var App = angular.module("App", []); App.controller("ctrl", function ($scope) { $scope.style={color:'red'}; }); </script> </head> <body> <div ng-controller ="ctrl"> <div ng-style='style'> 測試 </div> </div> </body> </html>效果:
點擊這裏查看效果。
(4)ng-show/ng-hide
這是兩個經常使用的指令,對應的值爲true或false。當爲true的時候,對應的指令生效,對應的css是display: block和display:none。
<!DOCTYPE html> <html ng-app="App"> <head> <script type="text/javascript" src="http://sandbox.runjs.cn/uploads/rs/394/xjz9g1bv/angular.js"></script> <script type="text/javascript"> var App = angular.module("App", []); App.controller("ctrl", function ($scope) { $scope.isshow = false; }); </script> </head> <body> <div ng-controller ="ctrl"> <input type="checkbox" ng-model="isshow"/>顯示 <div ng-show="isshow"> 顯示的內容。 </div> </div> </body> </html>運行效果:
點擊這裏查看效果。
既然是表單指令,天然是指input、select、form等指令,還包括一些表單元素的狀態指令。下面這個例子介紹一個登錄窗口,當用戶名或密碼爲空時進行提示,並登陸按鈕不可用。
這其中要用到input指令和form指令,咱們須要參考AngularJS的API使用這些指令的屬性,下面來看例子吧。
<!DOCTYPE html> <html ng-app="App"> <head> <link rel="stylesheet" type="text/css" href="http://sandbox.runjs.cn/uploads/rs/394/xjz9g1bv/bootstrap.css"> <script type="text/javascript" src="http://sandbox.runjs.cn/uploads/rs/394/xjz9g1bv/angular.js"></script> <script type="text/javascript"> var App = angular.module("App", []); App.controller("ctrl", function ($scope) { $scope.loginInfo = { name: "", pwd: "" }; $scope.login = function () { alert("登錄名:" + $scope.loginInfo.name + "\n登錄密碼:" + $scope.loginInfo.pwd + "\n執行登錄驗證!"); } }); </script> </head> <body style='padding-top:10px;'> <div class='container' ng-controller="ctrl"> <!--form需有name屬性--> <form name='loginform' class="form-horizontal"> <div ng-class="{'form-group':true,'has-success':loginform.username.$valid,'has-error':!loginform.username.$valid}"> <label class='col-md-2 control-label'>登錄名:</label> <div class='col-md-7'> <!--input元素需有name屬性,注意:name屬性和ng-model綁定 --> <!--此處使用了 required、minlength、maxlength屬性 --> <input type="text" class="form-control" name='username' ng-model='loginInfo.name' required ng-minlength="3" ng-maxlength="10"> </div> <!--注意:此處使用的是form的name屬性和input元素的name屬性 --> <label class='col-md-3 control-label'> <span ng-show='loginform.username.$error.required'> 登錄名不能爲空。 </span> <span ng-show="loginform.username.$error.minlength"> 登陸名不能小於3個字符 </span> <span ng-show="loginform.username.$error.maxlength"> 登陸名不能大於10個字符 </span> </label> </div> <div ng-class="{'form-group':true,'has-success':loginform.userpwd.$valid,'has-error':!loginform.userpwd.$valid}"> <label class='col-md-2 control-label'>密碼:</label> <div class='col-md-7'> <input type="password" class="form-control" name='userpwd' ng-model='loginInfo.pwd' required> </div> <label class='col-md-3 control-label' ng-show="loginform.userpwd.$error.required"> 密碼不能爲空。 </label> </div> <div class="form-group"> <div class='col-md-offset-2 col-md-10'> <!--注意:此處使用ng-submit和ng-disabled--> <input type="submit" class='btn btn-primary' value="登陸" ng-click="login();" ng-disabled="!loginform.$valid" /> <button class='btn btn-danger'> 取消 </button> </div> </div> <div class="form-group"> <div class="col-md-offset-2 col-md-10"> loginform.username.$valid = {{loginform.username.$valid}} </div> <div class="col-md-offset-2 col-md-10"> loginform.username.$error = {{loginform.username.$error}} </div> <div class="col-md-offset-2 col-md-10"> loginform.$valid = {{loginform.$valid}} </div> <div class="col-md-offset-2 col-md-10"> loginform.$error = {{loginform.$error}} </div> </div> </form> </div> </body> </html>看看效果:
點擊這裏查看效果。表單指令較多,此處簡單介紹通常經常使用指令,深刻的和其餘的讓咱們線下本身學習吧。
(1)ng-repeat
ngRepeat
指令爲集合中的每項實例化一個模板。每一個模板的實例擁有本身的域,使用循環變量指向當前集合項上,$index
指向當前項的索引或鍵值。它有一些經常使用的屬性:$index、$first、$middle、$last、$odd、$even。<!DOCTYPE html> <html ng-app="App"> <head> <script type="text/javascript" src="http://sandbox.runjs.cn/uploads/rs/394/xjz9g1bv/angular.js"></script> <script type="text/javascript"> var App = angular.module("App", []); App.controller("ctrl", function ($scope) { $scope.personList = [{ name:"張三", age:30 },{ name:"李四", age:40 },{ name:"王五", age:50 }]; }); </script> </head> <body> <div ng-controller ="ctrl"> <ul> <li ng-repeat='person in personList'> 姓名:{{person.name}},年齡:<span ng-bind='person.age'></span> </li> </ul> </div> </body> </html>運行效果:
點擊這裏查看。
(2)ng-if
ngIf
指令基於{表達式}來移除或重建DOM樹的一部分。若是賦給ngIf
的表達式計算結果爲假,元素會從DOM移除,其它狀況會複製一份元素插入到DOM中。查看效果:
點擊這裏查看效果。
乍一看,這效果和上面那個ng-show和ng-hide有點類似麼。確實,從圖片效果看,倒是如此,可是ng-show和ng-hide只是將display屬性設置爲block或null,而ng-if則是將該dom元素移除或增長上的,具體看下圖:
(3)ng-switch
ngSwitch
指令用於根據域表達式在你的模板上按條件切換DOM結構。查看代碼:
<!DOCTYPE html> <html ng-app="App"> <head> <script type="text/javascript" src="http://sandbox.runjs.cn/uploads/rs/394/xjz9g1bv/angular.js"></script> <script type="text/javascript"> var App = angular.module("App", []); App.controller("ctrl", function ($scope) { $scope.switchValue = 1; }); </script> </head> <body> <div ng-controller ="ctrl"> <input type='radio' value='1' ng-model='switchValue' />1 <input type='radio' value='2' ng-model='switchValue' />2 <input type='radio' value='3' ng-model='switchValue' />3 <input type='radio' value='4' ng-model='switchValue' />4 <div> 選擇的值 {{switchValue}} </div> <div ng-switch="switchValue"> <div ng-switch-when='1'> 個人值是1 </div> <div ng-switch-when='2'> 個人值是2 </div> <div ng-switch-when='3'> 個人值是3 </div> <div ng-switch-default> 我是default </div> </div> </div> </body> </html>查看效果:
在上圖,咱們也能夠看到,隨着選擇值的不一樣,ng-switch也在不停的增刪dom。點擊這裏查看效果。
事件指令也是一個你們族呀,經常使用的有這些呀:ng-change、ng-dblclick、ng-mousedown、ng-mouseenter、ng-mouseleave、ng-mousemove、ng-mouseover、ng-mouseup、ng-submit啊。
不過只是對經常使用的事件作了封裝,很好使用,上面的例子中用到了ng-click,小夥伴,你可get到了,這兒就不寫例子啦。
指令的內容真的很是多,很是多,這篇文章看到這兒,你應該已經大體瞭解了內置指令的應用,像開頭說的,之後你用到哪一個指令,就好好的學習哪一個指令吧。