2013-04-22 205 views
0

我有一个简单的场景,我试图弄清楚。将控制器传递给指令 - AngularJS

我有一个控制器(这是一个对话框)。控制器看起来像这样:

app.controller('fullCtrl', function ($scope, $dialog, $http, $log, apiService, stateService, promiseData, dialog, leaf, CONST) { 
... 
} 

对话框上的UI元素之一是正在使用指令呈现在画布:

<div leaf-graph structure=structure></div> 
app.directive('leafGraph', ['$timeout', function (timer, $log) { 
... 
} 

的问题是,我正在寻找一种方式指令与控制器进行交互,所以当用户点击指令时,控制器重新绑定到一个新的数据。

基本上,它的所有完成在JavaScript方面,其中用户双击画布上的某些区域,它应该触发控制器上的一些操作。

有没有办法将控制器传递给指令?

THX

+0

你需要控制器通过该指令,或者是足够的指令来调用一个方法在控制器上?此外,该指令是否会创建新范围,隔离范围或无新范围? – 2013-04-22 22:31:08

回答

0

值得注意的是,在ng-repeat循环中使用$ apply的指令会导致“Error:$ digest already in progress”。

至少有两个其他方法似乎可以工作,而不会产生该错误。

  • 这一个允许将参数传递给在命名的功能:

    范围$的eval(attrs.repeatDone);

用法:

<div ng-repeat="feed in feedList" repeat-done="layoutDone($index)"> or 
<div ng-repeat="feed in feedList" repeat-done="layoutDone()"> 
  • 这一需要函数名只,无 “()” 或传递参数:

    范围[attrs.repeatDone]();

用法:

<div ng-repeat="feed in feedList" repeat-done="layoutDone"> 

指令:

.directive('onEnter', function() { 
    return function(scope, element, attrs) { 
     element.on('keydown', function(event) { 
      if (event.which === 13) { 
       scope.$eval(attrs.onEnter); 
      } 
     }) 
    } 
}) 
相关问题