directive接受兩個參數,指令的名字(字符串)和方法(這個函數返回一個對象,其中定義了指令的所有行爲):函數
angular.module('myApp', []) .directive('myDirective', function() { return { restrict: String, priority: Number, terminal: Boolean, template: String or Template Function:function(tElement, tAttrs) (...}, templateUrl: String, replace: Boolean or String, scope: Boolean or Object, transclude: Boolean, controller: String or function(scope, element, attrs, transclude, otherInjectables) { ... }, controllerAs: String, require: String, link: function(scope, iElement, iAttrs) { ... }, compile: //// 返回一個對象或鏈接函數,以下所示:
function(tElement, tAttrs, transclude) { return { pre: function(scope, iElement, iAttrs, controller) { ... }, post: function(scope, iElement, iAttrs, controller) { ... } }
//或者 return function postLink(...) { ... } } }; });
注:post
1. restrict:(E元素A屬性C類名M註釋)ui
restrict是一個可選的參數。它告訴AngularJS這個指令在DOM中能夠何種形式被聲明。默認AngularJS認爲restrict的值是A,即以屬性的形式來進行聲明。spa
2. priority:優先級雙向綁定
優先級參數能夠被設置爲一個數值。大多數指令會忽略這個參數,使用默認值0,但也有些場景設置高優先級是很是重要甚至是必須的。rest
若是一個元素上具備兩個優先級相同的指令,聲明在前面的那個會被優先調用。若是其中一個的優先級更高,則無論聲明的順序如何都會被優先調用:具備更高優先級的指令老是優先運行。code
3. terminal對象
terminal是一個布爾型參數,能夠被設置爲true或false。這個參數用來告訴AngularJS中止運行當前元素上比本指令優先級低的指令。但同當前指令優先級相同的指令仍是會被執行。blog
4. template(字符串或函數)繼承
template參數是可選的,必須被設置爲如下兩種形式之一:
(1)一段HTML文本;
(2)一個能夠接受兩個參數的函數,參數爲tElement和tAttrs,並返回一個表明模板的字符串。tElement和tAttrs中的t表明template,是相對於instance的。在討論連接和編譯設置時會詳細介紹,模板元素或屬性與實例元素或屬性之間的區別。
5. templateUrl(字符串或函數)
templateUrl是可選的參數,能夠是如下類型:
(1)一個表明外部HTML文件路徑的字符串;
(2)一個能夠接受兩個參數的函數,參數爲tElement和tAttrs,並返回一個外部HTML文件路徑的字符串。
6. replace
replace是一個可選參數,若是設置了這個參數,值必須爲true,由於默認值爲false。默認值意味着模板會被看成子元素插入到調用此指令的元素內部
7. scope參數(布爾型或對象)
scope參數是可選的,能夠被設置爲true或一個對象。默認值是false。當scope設置爲true時,會從父做用域繼承並建立一個新的做用域對象。
隔離做用域:建立具備隔離做用域的指令須要將scope屬性設置爲一個空對象{}。若是這樣作了,指令的模板就沒法訪問外部做用域了。
綁定策略:使用無數據的隔離做用域並不常見,AngularJS 提供了幾種方法可以將指令內的隔離做用域同外部的做用域進行數據綁定。
本地做用域屬性:使用@符號將本地做用域同DOM屬性的值進行綁定。指令內部做用域能夠使用外部做用域的變量:@ (or @attr);
雙向綁定:經過=能夠將本地做用域上的屬性同父級做用域上的屬性進行雙向的數據綁定。就像普通的數據綁定同樣,本地屬性會反映出父數據模型中所發生的改變。= (or =attr)
父級做用域綁定 經過&符號能夠對父級做用域進行綁定,以便在其中運行函數。意味着對這個值進行設置時會生成一個指向父級做用域的包裝函數。& (or &attr)
8. transclude
transclude是一個可選的參數。若是設置了,其值必須爲true,它的默認值是false。
9. controller(字符串或函數)
controller參數能夠是一個字符串或一個函數。當設置爲字符串時,會以字符串的值爲名字,來查找註冊在應用中的控制器的構造函數: