新指令导致两次ng-change射击

时间:2015-02-02 14:43:46

标签: javascript angularjs angularjs-directive

我对角度很新,有问题,我想用变量来定义ng模型。这现在有效,但现在我遇到的问题是ng-change事件在使用此指令时会触发两次。

我将dynamic-model指令的优先级设置为-1,因为ng-change取决于当然的模型......

...
app.controller('testcontroller', function($scope, $http) {
  $scope.model = "dynamicmodel";
})

app.directive('dynamicModel',function($compile){
  directive = {
    priority : -1,
    link:function(scope,element,attr){
      element[0].removeAttribute('dynamic-model');
      element[0].setAttribute('ng-model',scope.$eval(attr.dynamicModel));
      $compile(element[0])(scope);
    }
  }
  return directive;
});

和html

<p>[[item.key]] <input type="text" dynamic-model="model" ng-change="update()" ng-model-options="{updateOn:'default blur', debounce:{default:1000, blur:0}}"></p>

请参阅此小提琴http://jsfiddle.net/r9t2mjy4/

我该怎么办?非常感谢

1 个答案:

答案 0 :(得分:0)

在指令中,如果您向元素添加另一个指令,请确保它的优先级低于您的指示。

调用$ compile传递当前优先级:

app.directive('dynamicModel',function($compile){
  directive = {
    priority: 2,
    link: function(scope,iElement,iAttrs){
      iElement[0].removeAttribute('dynamic-model');
      iAttrs.$set('ng-model',scope.$eval(attr.dynamicModel));
      $compile(iElement[0])(scope, null, 2);
    }
  }
  return directive;
});