将信息传递给ng-repeat ng-include范围

时间:2013-08-11 16:18:22

标签: angularjs controller ng-repeat

  • 我正在用我的AngularJS应用程序解决一个特定问题。

基本上,我有一个控制器“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(它的父控制器)中的数据列表中的哪个索引?

请不要告诉我,我需要制定所有指令:)

谢谢,伙计们。

1 个答案:

答案 0 :(得分:3)

也许我完全不理解你的问题,但是从文档中,$ index,$ first,$ middle和$ last都暴露在ng-repeat孩子的本地范围内。

我已经加入plunker来证明这一点。 ChildCtrl从父级访问$ index以获取它正在访问的父级中的哪个元素的索引。