Angularjs 在自定义指令中更改两次
附加的自定义指令允许使用ng更改属性 问题是,当我在同一个视图中使用它两次时,我注意到bar方法触发了两次,我发现问题是Angularjs 在自定义指令中更改两次,angularjs,angularjs-directive,Angularjs,Angularjs Directive,附加的自定义指令允许使用ng更改属性 问题是,当我在同一个视图中使用它两次时,我注意到bar方法触发了两次,我发现问题是$viewchangelisters两次存储控制器的相同方法。注意:请注意,可能我已经用两种不同的ng更改方法对同一指令执行了两次 有人有办法克服这个问题吗 HTML: <my-directive ng-model="foo" items="items" ng-change="bar1(foo)"></my-directive> <my-dire
$viewchangelisters
两次存储控制器的相同方法。注意:请注意,可能我已经用两种不同的ng更改方法对同一指令执行了两次
有人有办法克服这个问题吗
HTML:
<my-directive ng-model="foo" items="items" ng-change="bar1(foo)"></my-directive>
<my-directive ng-model="foo2" items="items" ng-change="bar2(foo2)"></my-directive>
指令:
template: '<div ng-repeat="item in items" ng-click="updateModel(item)">{{item}}</div>',
require: "ngModel",
scope : {
items : "="
},
link: function(scope, element, attrs, ctrl){
scope.updateModel = function(item)
{
ctrl.$setViewValue(item);
}
ctrl.$viewChangeListeners.push(function() {
scope.$eval(attrs.ngChange);
});
}
模板:“{{item}}”,
要求:“ngModel”,
范围:{
项目:“=”
},
链接:函数(范围、元素、属性、ctrl){
scope.updateModel=函数(项)
{
ctrl.$setViewValue(项目);
}
ctrl.$viewChangeListeners.push(函数(){
范围$eval(属性变化);
});
}
试试这个,点击向上(1),然后点击向下(1),然后点击向上(1)。当您的自定义输入指令“支持”
ngModel
,即它使用ngModel
管道设置视图值时,会触发以下事件:bar1、bar2、bar1、bar2,它会自动获得支持使用ngModel
的其他指令的好处,如ngrequired
,ng maxlength
、和ng change
因此,不需要以下:
ctrl.$viewChangeListeners.push(function() {
scope.$eval(attrs.ngChange);
});
在您的特定示例中,它实际上不会两次触发
bar1()
/bar2()
处理程序,因为作用域。$eval(attrs.ngChange)
在没有bar1()
和bar2()
的隔离作用域内进行计算。因此,在您使用隔离作用域之前的测试中可能发生了这种情况。我遇到了同样的问题,但在这个站点或其他地方找不到解决方案。在我的例子中,null被作为附加函数调用中的值发送。因此,我的解决方法是在函数中处理null:
$scope.bar1 = function(foo){
if(foo != null){
//perform the task
}
};
抱歉,包括在内!你怎么认为它是那样燃烧的?我检查了它,我想当你第二次点击upper 1时它不会开火(因为它没有改变)。