Angularjs 角度定向多输入一模型

Angularjs 角度定向多输入一模型,angularjs,angularjs-directive,angularjs-model,Angularjs,Angularjs Directive,Angularjs Model,HTML: JS: var-app=angular.module('app',[]); 应用程序指令('keyFilter',函数(){ 变量模式=/([\s!$%^&*()\+\\[\]:“;”?,.\/])/; 功能链接(范围){ 范围:$watch('模型',函数()){ if(scope.model==未定义) 返回 if(模式测试(范围模型)){ scope.model=scope.model.replace(模式“”); toast('Denied symbol',4000,'r

HTML:


JS:

var-app=angular.module('app',[]);
应用程序指令('keyFilter',函数(){
变量模式=/([\s!$%^&*()\+\\[\]:“;”?,.\/])/;
功能链接(范围){
范围:$watch('模型',函数()){
if(scope.model==未定义)
返回
if(模式测试(范围模型)){
scope.model=scope.model.replace(模式“”);
toast('Denied symbol',4000,'rounded');
}
});
}
返回{
限制:“A”,
范围:{
模型:'=ngModel'
},
链接:链接
}
});
我有许多绑定到同一模型的输入,我正在过滤用户输入,当用户按下拒绝键时,我想显示一个祝酒词,通知他不能使用此符号,但祝酒次数等于绑定到同一模型的输入次数。 我以为我只和一个模型一起工作

示例如下:

我怎样才能解决这个问题,或者改变它的工作逻辑


p、 美国angular初学者

如果他们都绑定到同一个模型,那么一个模型中的每个更改都会发送给其他模型,所以只需将您的指令放在一个输入上,而不是全部输入

这是一个工作的PRUNKR:

使用:

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
  }
});


您可以在控制台中看到消息只显示一次,并且来自任何输入字段

嗯,这是一个很好的解决方案,但我仍然无法应用它,因为所有输入都是由ng repeat生成的,这是一个复杂的结构。丑陋的修复方法:添加一个带指令的隐藏输入,让所有其他输入都不显示。否则,可能不应该是我n指令?只需观看您的模型添加土司?是的,您是对的,我将$watch从指令切换到控制器,现在它按预期工作,非常感谢!
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
  }
});
  <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" />