2013-04-22 243 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); 
      } 
     }) 
    } 
}) 
相關問題