本篇主要介紹angular使用指令修改DOM:
使用angular指令可以自己擴充套件html語法,還可以做很多自定義的事情.在後面會專門講解這一塊的知識,這一篇只是起到了解入門的作用.
與控制器,過濾器,服務,一樣,可以通過模組例項的directive的方法來建立指令:
var someModule = angular.module('SomeModule',[]);
someModule.directive('directiveName',function(){
return {
link: function(scope,elements,attrs,controller){
}
}
});
directive傳入兩個引數:
第一個引數是指令的名字;
第二個引數是一個工廠函式:
函式返回一個物件,物件的link方法的函式有四個引數:
scope:獲取外層scope的引用
elements:它所存在的DOM元素
attrs:傳遞給指令的一個屬性陣列
controller:DOM元素上的控制器
下面來看個簡單的小例子,在html5中,元素有autofocus屬性,新增了這個屬性的元素,會自動獲取焦點.我們可以使用angular來寫一個這樣的指令:
我們讓第二個button在開啟的時候就獲取焦點,所以按回車就相當於點選了這個按鈕:
<!DOCTYPE html> <html ng-app="AutoFocus"> <head> <title>16.1使用指令修改DOM</title> <meta charset="utf-8"> <script src="../angular.js"></script> <script src="script.js"></script> <style type="text/css"> *{ font-family:'MICROSOFT YAHEI'; font-size:12px } </style> </head> <body> <div ng-controller="focus"> <button ng-click="nofocus()">沒有焦點</button> <br/> <button myautofocus ng-click="hasfocus()">有焦點</button> <br/> <br/> <span>{{text}}</span> </div> </body> </html>
var autoFocus = angular.module('AutoFocus',[]); autoFocus.controller('focus',function($scope){ $scope.text="沒有點選任何按鈕"; $scope.nofocus = function(){ $scope.text="沒有點選任何按鈕"; }; $scope.hasfocus = function(){ $scope.text="點選了有焦點按鈕"; }; }); autoFocus.directive('myautofocus',function(){ return { link: function(scope,elements,attrs,controller){ elements[0].focus(); } } });
一.建立模組AutoFocus
二.通過模組的controller方法建立控制器focus
三.通過模組的directive方法建立指令myautofocus
myautofocus的工廠函式就是實現元素自動獲取焦點這一功能
效果截圖:
開啟頁面時:
按下回車後: