尝试调用控制器方法时,Angular Directive会抛出$ digest

时间:2013-06-16 15:15:59

标签: javascript angularjs angularjs-directive angularjs-scope

这是我的傻瓜 - http://plnkr.co/edit/VYH5QbO99ZbMkvc2D4Fe?p=preview

  • 我想把控制器方法的知识保存在指令之外,所以使用了Directive Attribute并在
  • 中传递控制器方法
  • 现在$digest already in progress(见console.log
  • 失败了

更新
萤火虫中HTML的身体看起来像

<body data-ng-controller="SummaryController" class="ng-scope">
    <h1>Hello Directive!</h1>
    <ng-view></ng-view>
    <div summary="loadPie1()">
     <div>
      <div id="pie1">I am pie 1</div>
      <div id="pie2">I am pie 2</div>
     </div>
    </div>
</body>

请帮忙

1 个答案:

答案 0 :(得分:1)

那里不需要scope.$apply。调用链接函数并使用范围构建模板,因此您尝试对正在构建的模板应用范围更改

http://jimhoskins.com/2012/12/17/angularjs-and-apply.html

解决问题的一种方法是:

app.directive('summary', function(){
  return {
    restrict: 'A',
    scope : {
       summary : '='
    },
    templateUrl: 'summary.html',
    link: function(scope, elem, attrs){
      console.log('directive: call to load pie1');
      scope.summary();
    }
  }
});

app.controller('SummaryController', function($scope){
  console.log('controller glued');
  $scope.loadPie1 = function() {
        console.log('controller: will load pie1');
  };
});


<div summary="loadPie1"></div>

您可以传递实际的函数闭包,而不是字符串