将控制器传递给指令 - AngularJS
问题描述:
我有一个简单的场景,我试图弄清楚。将控制器传递给指令 - 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
答
值得注意的是,在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);
}
})
}
})
你需要控制器通过该指令,或者是足够的指令来调用一个方法在控制器上?此外,该指令是否会创建新范围,隔离范围或无新范围? – 2013-04-22 22:31:08