$使用隔离范围时,请注意角度指令内部的值变化

时间:2015-02-04 21:11:10

标签: javascript angularjs

我正试图找到一种方法来监视对象中属性的变化值,我正在指示我的指令,我无法弄清楚我在这里做错了什么。

这是我的指令代码:

.directive('selectService', [function() {
  return {
    restrict: 'EA',
    scope: {
      distribution: '='
    },
    link: function(scope, element, attrs) {
      scope.$watch(scope.distribution.name, function(newValue) {
        console.log("Changed to " + newValue);
      });

所以说运行时的分布是这样的:

{ name: '', type: 'all' ... }

我想要在属性'name'更改为具有值时监视,以便我可以在我的指令中启用选择菜单。我所做的一切似乎都行不通。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

只需以正常方式使用watch,提供表示作用域属性的字符串或返回要监视的值的函数。

  scope.$watch('distribution.name', function(newValue) {
    console.log("Changed to " + newValue);
  });

用于在对象distribution上设置深度监视,将watch的第三个参数设置为true。 当您提供scope.distribution.name作为监视功能的第一个参数时,它只会设置监视scope.distribution.name的值(当时),这是不正确的。

<强>演示

angular.module('app', []).controller('ctrl', function($scope) {
  $scope.distribution = {};
}).directive('selectService', [
  function() {
    return {
      restrict: 'EA',
      scope: {
        distribution: '='
      },
      link: function(scope, element, attrs) {
        scope.$watch("distribution.name", function(newValue) {
          console.log("Changed to " + newValue);
        });
      }
    }
  }
])
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="app" ng-controller="ctrl">
  <input ng-model="distribution.name">{{distribution.name}}
  <div select-service distribution="distribution"></div>
</div>