2014-09-01 119 views
1

我正在努力編寫自定義元素指令。該指令稱爲myElement,根據某些參數生成多個textareainput字段,並將ngModel應用於這些字段。編譯元素指令期間傳播角度屬性指令

我也希望能夠指定myElement上的其他屬性指令,例如ngMaxlength,它會傳播到動態生成的輸入。

實施例:

<my-element foo="bar" ng-maxlength="100" my-other-directive/> 

可能被編譯爲:

<my-element foo="bar"> 
    <input type="text" ng-model="bar[abc]" ng-maxlength="100" my-other-directive/> 
    <input type="text" ng-model="bar[xyz]" ng-maxlength="100" my-other-directive/> 
</my-element> 

我還設置的myElement優先級爲更高的值。但是,雖然屬性已從父元素中正確刪除,但其他指令(如上例中的my-other-directive)仍然會爲myElement元素執行。這會導致需要ngModel的指令引發異常。我能做些什麼來防止這種情況發生?

EDIT我使用角1.2.20

編輯2我的指令看起來像這樣:

restrict: 'E', 
compile: function (element, attrs) { 
    var inputElements, attrsToRemove = []; 
    inputElements = ... // Create inputs based on attrs ... 
    angular.forEach(attrs.$attr, function (originalName, normalizedName) { 
     inputElements.attr(originalName, attrs[normalizedName]); 
      attrsToRemove.push(originalName); 
     } 
    }); 
    angular.forEach(attrsToRemove, function (name) { 
     element.removeAttr(name); 
    }); 
} 
+0

是這樣'<我的-element foo =「bar」my-child-directives =「ng-maxlength ='100'my-other-directive」/>'你有效的選擇嗎?這個想法是傳遞一個字符串與你想包含在子元素中的指令,而不是直接在父元素上定義它們。 – bmleite 2014-09-01 13:19:55

+0

你的代碼在哪裏? – Sacho 2014-09-01 13:42:23

+0

@bmleite你是個天才!爲什麼我沒有想到這個?奇蹟般有效。謝謝! – user2323470 2014-09-02 08:09:25

回答

0
+0

鏈接ngtutorial.com資源被破壞;答案是陳舊的 – 2016-04-04 16:10:47

+1

更新了鏈接... – 2016-04-25 06:06:16