1

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

  • 我想将控制器方法的知识保留在指令之外,因此使用指令属性并在内部传递控制器方法
  • 现在它失败了$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>

请帮忙

4

1 回答 1

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>

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

于 2013-06-16T15:20:26.573 回答