angular 自定義指令詳解 Directive
廢話不多說,下面就直接上代碼
//angular指令的定義,myDirective ,使用駝峰命名法 angular.module(‘myApp‘, []) .directive(‘myDirective‘, function ($timeout, UserDefinedService) { // 指令操作代碼放在這裏 }); //angular自定義指令 的使用,使用 “-” 來代替駝峰命名法 <div my-directive></div> 註意:為了避免與未來的HTML標準沖突,給自定義的指令加入前綴來代表自定義的 命名空間。AngularJS本身已經使用了 ng- 前綴,所以可以選擇除此以外的名字。 在例子中我們使用 my- 前綴(比如 my-derictive ) 。 指令的生命周期開始於 $compile 方法並 結束於 link 方法 //自定義指令的全部可設置的屬性大致如下 指令的選項如下所示,每個鍵的值說明了可以將這個屬性設置為何種類型或者什麽樣的 函數: angular.module(‘myApp‘, []) .directive(‘myDirective‘, function() { //指令名稱myDirective return { //返回一個對象 restrict: String, //可選字符串參數,可以設置這個指令在DOM中可以何種形式被聲明, //默認為A(attr(當做標簽屬性來使用))<div my-directive></div> // 設置為“E”(ele,(直接當做標簽來使用)) <my-directive></my-directive> //C(類名) //<div class="my-directive:expression;"></div> //M(註釋) //<--directive:my-directive expression--> //這些選項可以單獨使用,也可以混合在一起使用: //angular.module(‘myDirective‘, function(){ // return { // restrict: ‘EA‘ // 輸入元素或屬性 // }; //}) priority: Number, //優先級,可忽略,默認為0, ngRepeat的優先級為1000,這樣就可以保證在同一元素上,它總是在其他指令之前被調用。 terminal: Boolean,//(布爾型),true或false,如果為false,則這個參數用來告訴AngularJS停止運行當前元素上比本指令優先級低的指令。優先級相同的指令還是會被執行。 ngIf 的優先級略高於 ngView , template: String or Template Function: //(字符串或函數)指令中的一個重要的一個屬性,必須被設置其中一種 //1, 一段HTML文本; //2,可以接收兩個參數的函數,參數為 tElement 和 tAttrs //在html模板中必須只有一個根html標簽,且如果有換行則需要使用“\” //例如template: ‘ // <div> <-- single root element --> // <a href="http://google.com">Click me</a> // <h1>When using two elements, wrap them in a parent element</h1> // </div> //function(tElement, tAttrs) (...}, //更好的選擇是使用 templateUrl 參數引用外部模板,參考下面的參數 templateUrl: String, //(字符串或函數)1,外部路徑的字符串,2,接受兩個參數的函數,參數為 tElement 和 tAttrs ,並返回一個外部HTML文件路徑的字符串 //模板加載後,AngularJS會將它默認緩存到 $templateCache 服務中。(可以提前加載模塊到緩存中,提高加載速度) replace: Boolean or String, //(布爾型)默認為false(模板內容會加載到標簽內部),true(模板內容會替換當前標簽) scope: Boolean or Object, //(布爾型或對象),默認為false, 設置為true 時,會從父作用域繼承並創建一個新的作用域對象。 // ng-controller 的作用,就是從父級作用域繼承並創建一個新的子作用域。 //如果要創建一個能夠從外部原型繼承作用域的指令,將 scope 屬性設置為 true //設置為一個對象,則能設置 隔離作用域, scope 屬性設置為一個空對象 {} 。如果這樣做了,指令的模板就無法訪問外部作用域了: //例如.directive(‘myDirective‘, function() { // return { // restrict: ‘A‘, // scope: {}, // priority: 100, // template: ‘<div>Inside myDirective {{ myProperty }}</div>‘ // }; // }); //在scope對象中,[email protected]