Angular指令多个输入一个模型

时间:2015-08-20 08:36:07

标签: angularjs angularjs-directive angularjs-model

HTML:

<html ng-app="app">
<div class="container" style="margin-top: 30px">
  <input type="text" ng-model="newName" key-filter/>
  <input type="text" ng-model="newName" key-filter/>
  <input type="text" ng-model="newName" key-filter/>
  <input type="text" ng-model="newName" key-filter/>
</div>
</html>

JS:

var app = angular.module('app', []);
app.directive('keyFilter', function() {
  var pattern = /([\s !$%^&*()_+|~=`{}\[\]:";'<>?,.\/])/;
  function link(scope) {
    scope.$watch('model', function() {
      if(scope.model === undefined)
        return
      if(pattern.test(scope.model)) {
        scope.model = scope.model.replace(pattern, '');
        Materialize.toast('Denied symbol', 4000, 'rounded');
      }
   });
  }
  return {
    restrict: 'A',
    scope: {
      model: '=ngModel'
    },
    link: link
  }
});

我有很多输入绑定到同一个模型,我正在过滤用户输入,当用户按下拒绝键我想要显示一个祝酒词告诉他他不能使用这个符号,但是toasts等于绑定到同一模型的输入计数。 我以为我只和一个模特一起工作。

此处示例: http://codepen.io/anon/pen/XbLjVY?editors=101

我该如何解决这个问题,或者改变它的工作原理

P.S。角度初学者

1 个答案:

答案 0 :(得分:2)

如果它们都绑定到同一个模型,则其中一个中的每个更改都会发送给其他模板,因此只需将指令放在一个输入而不是全部输入上。

这是一个工作的plunkr: http://plnkr.co/edit/dI5TMHms2wsPHc9Xqewf?p=preview

使用:

  <input type="text" ng-model="newName" key-filter/>
  <input type="text" ng-model="newName" />
  <input type="text" ng-model="newName" />
  <input type="text" ng-model="newName" />

您可以在控制台中看到仅显示一次和任何输入字段

的消息