2014-10-30 45 views
0

我希望瞭解嵌套指令中預鏈接的順序。我已經制定了以下的html:不遵守指令的預鏈接排序

<directive-a ng-model="model1" directive-b="true"> 

</directive-a> 

<ssn-widget ng-model="abc" hc-initial="true"> 

</ssn-widget> 

繼在相關的javascript:

angular.module("directiveTest", []) 
.directive("directiveA", function(){ 
    return { 
    require: "ngModel", 
    restrict: "E", 
    compile: function(){ 
     return { 
     pre: function(scope, element, attrs, ngModelCtrl){ 
      alert("in pre of directiveA"); 
     } 
     } 

    } 
    }; 
}) 
.directive("directiveB", function(){ 
    return { 
    require : "ngModel", 
    restrict: "A", 
    compile: function(){ 
     return { 
     pre: function(scope, element, attrs, ngModelCtrl){ 
      alert("in pre of directiveB"); 
     } 
     } 

    } 
    }; 
}) 
.directive("ssnWidget", function(){ 
    return { 
    require: "ngModel", 
    restrict: "E", 
    compile: function(){ 
     return { 
     pre: function(scope, element, attrs, ngModelCtrl){ 
      alert("in pre of ssnWidget"); 
     } 
     } 

    } 
    }; 
}) 
.directive("hcInitial", function(){ 
    return { 
    require : "ngModel", 
    restrict: "A", 
    compile: function(){ 
     return { 
     pre: function(scope, element, attrs, ngModelCtrl){ 
      alert("in pre of hcInitial"); 
     } 
     } 

    } 
    }; 
}); 

我的印象中,預連接功能從父跑到孩子。因此,directive-assn-widget的預鏈接函數應分別在directive-bhc-initial之前運行。但是,這對於directive-adirective-b對而言是如此,但對於ssn-widgethc-initial則不適用。我無法理解這種行爲。以下是plunker:

Plunker

回答

1

指令沒有嵌套在你的榜樣,他們都在同一水平/標籤

嵌套的指令是其它指令的孩子:

<dir-a> 
    <dir-b></dir-b> 
</dir-a> 

我不知道,但對於同一級別的指令,按字母順序進行角度編譯。如果您將ssnWidget重命名爲gsnWidget,它將在hcInitial之前編譯

更改該行爲的最佳方法是在DDO中使用優先級屬性。

.directive("ssnWidget", function(){ 
    return { 
    require: "ngModel", 
    restrict: "E", 
    priority: 2, 
    compile: function(){ 
     return { 
     pre: function(scope, element, attrs, ngModelCtrl){ 
      alert("in pre of ssnWidget"); 
     } 
     } 

    } 
    }; 
}) 
+0

字母順序對我來說是一個驚喜。 :) – Vaibhav 2014-11-01 08:07:38