我有一个简单的场景,我试图找出答案。
我有一个控制器(它与对话框有界)。控制器看起来像这样:
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 :(得分:2)
您已经可以访问指令中的$ scope,包括您在该范围内定义的任何控制器函数。以下是一个示例:Egghead.io - Directives Talking to Controllers
答案 1 :(得分:0)
值得注意的是,在ng-repeat循环中使用$ apply的指令会导致“错误:$ digest已在进行中”。
至少还有其他两种方法可以正常工作,而不会产生错误。
这个允许将参数传递给指定的函数:
范围$的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);
}
})
}
})