如何在AngularJS中更改范围时重新应用指令

时间:2013-01-21 19:35:36

标签: javascript angularjs directive

说你有这样的事情:

<div mydirective>
  {{boundtoscope}}
</div>

并且您希望将mydirective应用于$ scope.boundtoscope的更改。你如何指导Angular重新申请该指令?

1 个答案:

答案 0 :(得分:8)

在你的指令的链接函数中,$ watch范围属性:

myApp.directive('mydirective', function () {
  return {
    link: function (scope, element, attrs) {
      scope.$watch('boundtoscope', function(newValue) {
          alert('boundtoscope changed');
          // do something here
      });
    }
  }
});

如果boundtoscope是数组或对象地图,并且您想要查找数组/对象中项目的更改,请将objectEquality argument设置为true以执行“浅” “观察(即比较数组/对象是否相等而非参考):

  scope.$watch('boundtoscope', function(newValue) {
      alert('boundtoscope changed')
  }, true);    // "shallow" compare

Angular 1.2为此添加了一种新方法$watchCollection

  scope.$watchCollection('boundtoscope', function(newValue) {
      alert('boundtoscope changed')
  });  // also does a "shallow" compare