0

我有一个简单的场景,我想弄清楚。

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

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 端完成,用户双击画布上的某些区域,它应该触发控制器上的一些操作。

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

谢谢

4

2 回答 2

2

您已经可以访问指令中的 $scope,包括您在该范围内定义的任何控制器函数。这是一个示例:Egghead.io - 与控制器对话的指令

于 2013-04-22T21:42:24.320 回答
0

值得注意的是,在 ng-repeat 循环中使用 $apply 的指令会导致“错误:$digest 已经在进行中”。

至少有两种其他方法似乎可以代替,而不会产生该错误。

  • 这个允许将参数传递给命名函数:

    scope.$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-23T01:12:20.687 回答