我想動態地向我的所有控制器&窗體中的所有文本框添加指令。 我有一個黑客從這裏開始:How to dynamically add a directive to an input element in AngularJS如何在控制器和模塊中動態地向AngularJS中的所有輸入元素添加指令
但在我的情況:每年大約有200多個形態不同的控制器&模塊&傳播這將是非常耗時的到處添加。
有沒有更容易或更優雅的方式來做到這一點?
編輯:我想做什麼? 我想刪除用戶在所有輸入框中輸入的所有前導空格&。
我想動態地向我的所有控制器&窗體中的所有文本框添加指令。 我有一個黑客從這裏開始:How to dynamically add a directive to an input element in AngularJS如何在控制器和模塊中動態地向AngularJS中的所有輸入元素添加指令
但在我的情況:每年大約有200多個形態不同的控制器&模塊&傳播這將是非常耗時的到處添加。
有沒有更容易或更優雅的方式來做到這一點?
編輯:我想做什麼? 我想刪除用戶在所有輸入框中輸入的所有前導空格&。
角度可以有多個指令具有相同名稱的控制器,並且將它們全部應用到元素。創建另一個input
指令與期望的行爲(demo):
.directive('input', function($compile) {
return {
restrict: 'E',
require: '?ngModel',
link: function(scope, elem, attrs, ngModel) {
if (!ngModel) {
return;
}
ngModel.$parsers.push(function(value) {
return value.trim();
});
}
}
});
謝謝。你的方法很好,但是文本框並沒有反映修剪後的值(默認情況下它是這樣的) –
已經接受了你對這個方法的回答。這個問題值得另一個問題.. –
如果你在你的所有形式的任何普通類喲可以創建與類名
.directive('form-class',function($compile){
return{
restrict: 'C',
link: function(scope, elem, attrs){
}
}
})
使用由我來解決問題(ORI大道的答案的擴展)的解決方案:
app.directive('input', function() {
return {
require: '?ngModel',
link: function (scope, element, attr, ngModelCtrl) {
if (ngModelCtrl) {
if (element.attr('type') == 'radio' || element.attr('type') == "file" ||
element.attr('type') == "checkbox" || element.attr('type') == "submit")
{
//ignore them
return;
}
element.bind("change", function() {
if (element.val()) {
ngModelCtrl.$setViewValue(element.val().trim());
ngModelCtrl.$render();
}
});
}
}
};
});
激活您的動態指令只有當一個控制器已激活 – Thaadikkaaran