2
  • 我正在为我的 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 (它是父控制器)的数据列表中的哪个索引它应该拾取?

请不要告诉我我需要将它们全部设为指令:)

多谢你们。

4

1 回答 1

3

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

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

于 2013-08-11T19:16:34.250 回答