角度表不会触发

时间:2014-05-01 18:18:57

标签: javascript angularjs angularjs-directive

我有一个指令:

.directive('myDirective', function(){
    'use strict';
    return {
        restrict: 'A'
        , link: function(scope, element, attrs) {
            var c = 0;

            function stuff() {
                console.log('==== compute ====');
                return { 'c' : c };
            }

            scope.$on('Test', function(event) {
                c += 1;
                console.log('++++broadcast received++++ phase:',  scope.$$phase);
            });

            scope.$watch(stuff(), function () {
                console.log('-----Seen-----');
            });
        }
    };
})

在我正在播放的另一个范围的控制器中的其他地方,上面的“开”是接收广播,我正在获取记录的条目。 但是,当发生这种情况时,Watch永远不会开火,“东西”不会被调用。 $$阶段也报告$ apply。

我有多少错误?

2 个答案:

答案 0 :(得分:1)

它应该是scope.$watch(stuff, ...)。没有括号。基于@marck的演示代码(谢谢):

  link: function(scope, element, attrs) {
    var c = 0;

    function stuff() {
      console.log('==== compute ====');
      return {
        'c': c
      };
    }

    scope.$on('Test', function(event) {
      c += 1;
      console.log('c=',c);
    });

    scope.$watch(stuff, function(u,v) {
      console.log(u,v);
    }, true);

    scope.cPlusOne = function() {
      scope.$emit('Test');
    };

  }

答案 1 :(得分:-1)

$watch监视范围变量的变化。使用$watch(stuff()...,您可以调用stuff并让角度观看返回的内容。这是{c:c}