以ng-repeat

时间:2015-10-06 18:11:21

标签: javascript angularjs

我的代码如下:

<my-directive ng-repeat="datum in data"></my-directive>

my-directive的每个实例都有一个控制器,我想将其暴露给父作用域。许多指南都说要将my-directive的控制器注入父作用域,但不会调用一个方法对my-directiveng-repeat的每个实例产生影响?我想对my-directive的每个实例进行具体控制。

在实际应用程序中,该指令是一个相当大的模块,可以在一系列供应商的页面上部署视频。不同的供应商有不同的方法名称,如playplayVideo等。该指令将这些差异抽象为标准接口,以及接受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()

这样做有什么问题吗?还有更好的方法吗?

编辑 http://plnkr.co/edit/BwI822V2NDTHPeIC8FMW

1 个答案:

答案 0 :(得分:0)

我会$broadcast带有索引值的消息,当指令控制器收到消息时,特定控制器会知道消息是否已发送给它。

(我的网页-controller.js)

$broadcast('doStuff', someIndex);

(MY-directive.js)

$on('doStuff', function(index){
if (index == $scope.myDirectiveIndex)
  doStuff();
});