如何使角度摘要只是指令的范围

时间:2016-02-23 01:50:43

标签: angularjs angularjs-directive

根据问题How to limit angular digest to only effect/re-render one component/directive

中的答案,我有以下的plunker

JS代码(从原始问题中省略控制器)

app.directive('ngClock', function($timeout){
  return {
    restrict: 'E',
    template:'<span>{{date}}</span>',
    controller: function($scope, $element) {
      $scope.date = new Date();

      setInterval( function() {
        $scope.date = new Date();
        $scope.$digest();
      }, 1000);
    }
  }
});

HTML

 <body ng-controller="MainCtrl">
    <p ng-controller="ChildCtrl">Interval counter: {{ date }}</p>
    <ng-clock></ng-clock>

    <!-- pretend this is our heavy calculation that we don't want to occur often -->
    <p>Heavy calc: {{ calc() }}</p>
  </body>

Plunker

对指令范围的$ digest的调用并不意味着刷新&#39;整个页面。但确实如此。

删除<ng-clock>并只留下基于控制器的普通时钟,工作得很好。所以基本上,控制器内的$ scope。$ digest正确地保留在它的范围内,但由于某种原因,指令控制器内的$ digest调用超出了它的范围。

主要使用Angular解决方案,是否可以获取时钟小部件或其他任何频繁更新指令,以便不会导致整页摘要?

1 个答案:

答案 0 :(得分:0)

在阅读this文章后,该文章断言该指令应该可行,我在指令中意识到我所缺少的内容:

scope: true

现在有效。让我失望的是我调试了指令,并且我检查了它的范围,看起来它确实是它自己的范围。