angularjs - ngChange in custom directive fire twice -


attached custom directive let using ng-change attribute.

the problem is, when using twice in same view, notice bar method fire twice, found problem $viewchangelisteners store same method of controller twice. note: notice maybe i've same directive twice 2 different ng-change methods

have 1 idea on problem?

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> 

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

plunkr sample

try one, click on (1), click on down (1), click on (1). events fires following: bar1, bar2, bar1, bar2

when custom input directive "supports" ngmodel - uses ngmodel pipeline set view value - automatically gets benefit of supporting other directives use ngmodel, ng-required, ng-maxlength, and ng-change.

and so, following is not needed:

ctrl.$viewchangelisteners.push(function() {    scope.$eval(attrs.ngchange); }); 

in particular example not fire bar1()/bar2() handlers twice, because scope.$eval(attrs.ngchange) evaluated inside isolate scope doesn't have bar1() , bar2(). so, perhaps happened in testing before used isolate scope.


Comments

Popular posts from this blog

android - MPAndroidChart - How to add Annotations or images to the chart -

javascript - Add class to another page attribute using URL id - Jquery -

firefox - Where is 'webgl.osmesalib' parameter? -