基本上,我有一个控制器“PageCtrl”,它通过服务提取数据列表。数据保存在PageCtrl中。一切正常 - 到目前为止一切顺利。
现在我的问题:对于PageCtrl内部数据的每个对象,我使用ng-repeat来显示刚刚获取的每个数据。
在每个ng-repeats中,我使用ng-include来获取正确的模板,具体取决于每个对象中的数据(基本上数据是要在页面上显示的元素列表。每个元素拥有它自己的控制器。
由于ng-include创建了一个新闻镜,所有创建的子作用域/控制器都可以访问数据,因为它位于$ parent控制器中 - PageCtrl。
一切正常,除了每个在ng-repeat / ng-include中创建的控制器需要知道父级数据列表中的哪个对象,它需要用来显示。
基本上,在我的ng-repeat中,我想使用$ index并将其传递给ng-include中包含的控制器。但我不能这样做!如果我使用ng-init,那么ng-init中的代码将在父作用域上执行,即。我原来的PageCtrl。
如果不使用指令,我怎样才能将信息传递给控制器,以便它知道它应该使用哪个数据对象?
以下是在MainCtrl中循环数据的代码:
<div ng-repeat="element in elements" >
<ng-include src=" GetTemplateFromElement(element.type) " ng-init=" SetElementNo($index); "></ng-include>
</div>
在代码片段中,我在MainCtrl上调用GetTemplateFromElement,返回要包含的视图。在包含的视图中,我指的是哪个控制器应该完成工作。我尝试使用$ index告诉包含控制器它应该使用的数据中的哪个索引。但是当然代码是在MainCtrl范围内执行的。视图示例:
<div ng-controller="ElementDocumentCtrl">
<div ng-bind-html-unsafe="element.document_content"></div>
</div>
在代码片段中,“element.document_content”位于ElementDocumentCtrl的范围内,后者从其父级PageCtrl中提取数据。
如何告诉指令包括它应该选择的PageCtrl(它的父控制器)中的数据列表中的哪个索引?
请不要告诉我,我需要制定所有指令:)
谢谢,伙计们。
答案 0 :(得分:3)
也许我完全不理解你的问题,但是从文档中,$ index,$ first,$ middle和$ last都暴露在ng-repeat孩子的本地范围内。
我已经加入plunker来证明这一点。 ChildCtrl从父级访问$ index以获取它正在访问的父级中的哪个元素的索引。