我的代码如下:
<my-directive ng-repeat="datum in data"></my-directive>
my-directive
的每个实例都有一个控制器,我想将其暴露给父作用域。许多指南都说要将my-directive
的控制器注入父作用域,但不会调用一个方法对my-directive
内ng-repeat
的每个实例产生影响?我想对my-directive
的每个实例进行具体控制。
在实际应用程序中,该指令是一个相当大的模块,可以在一系列供应商的页面上部署视频。不同的供应商有不同的方法名称,如play
,playVideo
等。该指令将这些差异抽象为标准接口,以及接受init数据,要加载的视频的ID等.I我正在寻找一种从父控制器调用这些标准接口方法的方法。下面的示例(使用plunkr)是真实事物控制流程的一个非常简化的版本。
我现在这样做的方式:
(MY-directive.js)
link: ($scope, $element, $attr, $ctrl) {
$scope.controller = $ctrl;
}
(my-page.html)
<my-directive ng-repeat="datum in data" controller="datum.controller"></my-directive>
(my-page-controller.js)
data[someIndex].controller.doStuff()
这样做有什么问题吗?还有更好的方法吗?
答案 0 :(得分:0)
我会$broadcast
带有索引值的消息,当指令控制器收到消息时,特定控制器会知道消息是否已发送给它。
(我的网页-controller.js)
$broadcast('doStuff', someIndex);
(MY-directive.js)
$on('doStuff', function(index){
if (index == $scope.myDirectiveIndex)
doStuff();
});