当控制器$ scope中的模型更改时,如何从内部指令访问模型?

时间:2013-05-11 09:37:25

标签: angularjs angularjs-directive

我正试图在指令内部的值从外部变化时看起来它对任何一个范围都不起作用。$ watch或attrs。$ observe。

我有一个小提琴here

angular.module('zippyModule', [])
  .directive('elem', function(){
    return {
      restrict: 'E',
        transclude:true,
        template:"Directive: <span ng-repeat='i in values'>{{i}} </span>",
      scope: { values:'=zippyTitle' },
      link: function(scope, element, attrs) {
         attrs.$observe ('zippyTitle',function(newValue){
             console.log (scope.values);
         });
          scope.$watch ('values',function(newValue){
             console.log (scope.values);
         });

      }
    }
  });

1 个答案:

答案 0 :(得分:2)

如果你想观看数组的内容(而不是它的引用),你需要通过将true作为$watch方法的最后一个参数传递给深度观察:

scope.$watch ('values',function(newValue){
             console.log (scope.values);
}, true);

http://jsfiddle.net/dVzCP/

使用最新的AngularJS(1.1.4),事情变得容易一些,因为有一个专门为集合的浅表元素创建的新方法(scope.$watchCollection): http://code.angularjs.org/1.1.4/docs/api/ng.$rootScope.Scope#$watchCollection