directive <二>link.element

複製代碼
angular.module("APP",[])
    .directive("testDw",function () {
       return{
           restrict:"E",
           scope:"=",
           template: "<div class='a'><div class='b'> 123344</div></div>",
           link:function (scope,element,attrs) {
               console.log(element.length);  //1
               console.log(element);         //2
               console.log(element[0]);      //3
               console.log(element[0].firstChild);  //4
               console.log(element.children("div"));  //5
               console.log(element.children("div")[0]);   //6
               console.log(element[0].getElementsByClassName("a"));  //7
               element[0].getElementsByClassName("a")[0].style.backgroundColor="black";
               element[0].firstChild.style.backgroundColor="red";
           }
       }
    });
複製代碼

以上爲指令中的代碼javascript

複製代碼
<!DOCTYPE html>
<html lang="en" ng-app="APP">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body >

<div><test-dw></test-dw></div>
<script type="text/javascript" src="angular.min.js"></script>
<script type="text/javascript" src="app3.js"></script>
</body>
</html>
複製代碼

以上爲html的代碼css

 結果:html

1.結果是 length=1,能夠看出element是一個有部分jquery dom對象屬性的dom對象,且有數據特性;java

2.從結果能夠看出指向的是[test-dw],從圖中能夠看出element[0]=<test-dw>,length=1,_proto_爲對象的內部原型(每一個對象都會在其內部初始化一個屬性,就是_proto_)jquery

3.從結果能夠看出 element[0]=<test-dw>angularjs

4.element[0].firstchild 爲div塊app

5.element[0].children("div")不是一個div的具體塊,它也和element同樣是一個具備一個部分jquery dom對象屬性的dom對象,且具備數據特性dom

6.element[0].children("div")[0]這個纔是到了具體的div塊 (它和element[0].firstchild同樣,能夠對比下)函數

7.注意:結果和5不同,7是用原生的js寫的,因此內部原型不一樣。post

<body >
<p>{{message}}</p><input ng-model="message" />
<div><test-dw></test-dw></div>
<script src="https://cdn.bootcss.com/angular.js/1.4.0-beta.4/angular-1.4.0-beta.5/angular.js"></script>
<script type="text/javascript">
    var appd = angular.module("APP",[])
        .directive("testDw", function(){
            return{
                restrict:"A",
                scope:true,
                template:"<div><button>點擊</button><div>{{message}}</div></div>",
                //replace:true,
                link:function(scope, element, attrs){
                    element.bind("click", function(){
                        scope.$apply(function(){
                            scope.message="這就對啦";
                        })
                    } )
                }
            }
        })
</script>
</body>

哈哈!其實directive中有不少內容可講,其後放幾個連接,用的時候能夠專研:

「link」屬性的值是一個函數,在該函數中能夠操控DOM元素對象,包括綁定元素的各種事件,定義事件觸發時執行的內容,函數定義的代碼以下:
link:function(scope,element,attrs){
...
}
其中
scope參數表示指令所在的做用域,它的功能和頁面中控制器注入的做用域是相同的,
element參數表示指令中的元素,
attrs表示指令元素的屬性集合。
還有scope是return裏面的不是link裏面的:

當爲false時候,兒子繼承父親的值,改變父親的值,兒子的值也隨之變化,反之亦如此。(繼承不隔離)

當爲true時候,兒子繼承父親的值,改變父親的值,兒子的值隨之變化,可是改變兒子的值,父親的值不變。(繼承隔離)

當爲{}時候,沒有繼承父親的值,因此兒子的值爲空,改變任何一方的值均不能影響另外一方的值。(不繼承隔離)

還有scope的綁定策略: @    =    &

以上詳見:http://www.jb51.net/article/83051.htm

 
controller,link,compile有什麼不一樣:
 
由結果能夠看出來,controller先運行,compile後運行,link不運行。
由結果能夠看出來,controller先運行,link後運行,link和compile不兼容。
以上詳見:http://blog.51yip.com/jsjquery/1607.html
 
往後有實戰例子;將貼下方
相關文章
相關標籤/搜索