范围。$ digest()不更新本地范围

时间:2014-08-30 13:08:08

标签: angularjs angularjs-directive

在1.3.0-beta.15上运行的角度应用程序中,我有一个如下所示的指令:

.directive('digester', function() {

  return {
    scope: {
      object: '=',
      digestTrigger: '='
    },

    templateUrl: 'some-template.html,

    link: function(scope) {
      scope.digestTrigger = function() {
        scope.$digest();
      }       
    }
  };
});

一个看起来像这样的模板:

<div>{{object.title}}</div>

某处看起来像这样的服务:

.service('serviceToCallDigest', function() {

  return {
    object: {
      title: 'someTitle'
    },

    digestTrigger: function() {},

    someFunction: function() {
      this.object.title = 'newTitle'; 
      this.digestTrigger();
    }
  };
});

和一个获取服务的控制器如下:

.controller('someCtrl', function($scope, serviceToCallDigest) {
  $scope.serviceToCallDigest = serviceToCallDigest;
}

并将指令连接起来:

<digester 
  digest-trigger="serviceToCallDigest.digestTrigger" 
  object="serviceToCallDigest.object">
</digester>

这里发生的事情是,当指令获得digestTrigger注入(作为空函数)时,它设置函数以触发指令本地$digest()函数,并通过指令外部的启动代码在适当的时候触发本地摘要。

我知道$apply()被建议使用,它会$digest()$rootscope,但我处于性能危急状态,我需要在本地更新指令。

此设置一直运行正常,直到升级到1.3.0-beta.16或更新版本。现在,当调用object.title时,新的someFunction不会传递给指令并在视图中更新。

有谁知道为什么会这样,以及如何解决这个问题?

0 个答案:

没有答案