2016-10-17 40 views
1

我想動態地向我的所有控制器&窗體中的所有文本框添加指令。 我有一個黑客從這裏開始:How to dynamically add a directive to an input element in AngularJS如何在控制器和模塊中動態地向AngularJS中的所有輸入元素添加指令

但在我的情況:每年大約有200多個形態不同的控制器&模塊&傳播這將是非常耗時的到處添加。

有沒有更容易或更優雅的方式來做到這一點?

編輯:我想做什麼? 我想刪除用戶在所有輸入框中輸入的所有前導空格&。

+0

激活您的動態指令只有當一個控制器已激活 – Thaadikkaaran

回答

1

角度可以有多個指令具有相同名稱的控制器,並且將它們全部應用到元素。創建另一個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(); 
     }); 
     } 
    } 
    }); 
+0

謝謝。你的方法很好,但是文本框並沒有反映修剪後的值(默認情況下它是這樣的) –

+0

已經接受了你對這個方法的回答。這個問題值得另一個問題.. –

0

如果你在你的所有形式的任何普通類喲可以創建與類名

.directive('form-class',function($compile){ 
    return{ 
     restrict: 'C', 
     link: function(scope, elem, attrs){ 
     } 
    } 
}) 
0

使用由我來解決問題(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(); 
        } 
       }); 
      } 
     } 
    }; 
}); 
相關問題