2014-12-01 70 views
1

是否有一種標準的方式通過擴展現有的指令來創建新的Angular指令?撰寫/擴展/「子類」Angular指令?

具體來說,我想自定義angular-contenteditable允許通過編輯選項更多的控制,比如防止換行:

<h1 my-custom-content-editable prevent-newlines="true">Hello, world!</h1> 

其實現是一樣的東西:

app.directive("myCustomContentEditable", function() { 
    return { 
     link: function($scope, elem, attrs) { 
      angular.element(elem).on("keydown", function($event) { 
       if (attrs.preventNewlines && $event.keyCode == 13) 
        $event.preventDefault(); 
      }); 
     }, 

    }; 
}) 

會是什麼最好在我的自定義指令中擴展contenteditable指令的方法?

請注意,我知道我可以將標記級別的指令組合起來 - <h1 contenteditable my-custom-content-editable>…</h1> - 但我想知道如何創建一個擴展另一個指令的單個指令。

回答

0

你不要繼承/擴展指令,你可以像你的例子一樣將它們組合起來。

另一個例子:

<input ng-init="myModel = 'stuff'" ng-change="somethingElse()" ng-model="myModel" /> 

基本上,指令不允許繼承。您可以簡單地獲取任何指令的原始代碼,並對其進行修改或組合指令以實現您要查找的功能。

雖然有些方法可以破解'擴展'一個指令,但是這包括使用require,我不覺得它是完全相同的。 http://thaiat.github.io/blog/2014/03/10/extending-an-existing-directive-in-angularjs/

+0

有用的答案永遠在這裏:http://stackoverflow.com/questions/17005122/extending-angular-directive – SoluableNonagon 2014-12-01 21:50:39

+0

爲什麼沒有一個子類/擴展/組合指令? – 2014-12-01 21:57:47

+0

我不確定你寫的是什麼意思,但是子類/擴展指的是繼承,對吧?我相信,因爲角度不支持這種功能。您可以定義自己的指令,並且可以覆蓋指令,但據我所知,您不能在JS中使用原型繼承模型來擴展現有指令。另外,結合上面我的示例中的多個指令通常會實現您正在查找的結果。 – SoluableNonagon 2014-12-01 22:21:47