AngularJS:ngTranslude和ngRepeat的访问范围

AngularJS: ngTransclude and access scope of ngRepeat

本文关键字:访问 范围 ngRepeat ngTranslude AngularJS      更新时间:2023-09-26

我们正在将应用程序升级到Angular 1.3.0。在这样做的过程中,我们遇到了一些问题,其中大多数问题似乎都归结为ngRepeat中ngTransclude的行为。

我们有一个指令,它重复一堆项目,周围有一个容器,但不拥有该容器的子项。例如,这里有一个简化的例子:

<div ng-controller="myController">
    There are {{items.length}} items.
    <div my-directive items="items">
        This item's name is {{item.name}}
    </div>
</div>

在内部,该指令包含<li ng-repeat="item in items" ng-transclude></li>等内容。

在更新之前,这一切都很顺利。重复的transcluded元素位于从ngRepeat创建的作用域继承的作用域中。到更新时,这些项位于从控制器继承的作用域中,据我所知,无法访问ngRepeat创建的作用域。

以下是两个JS Bin示例:

  • 旧(1.3.0-beta 1)行为:http://jsbin.com/kalutu/1/edit
  • 新(1.3.0)行为:http://jsbin.com/gufunu/1/edit

我如何才能实现Angular 1.3.0中的旧行为,或者它的一些外观?如果这是ngTransclude的预期行为,我如何在不知道它们是什么的情况下重复一堆子节点?

https://github.com/angular/angular.js/issues/8182

1.3决定,ng traclude不会从该指令中删除范围。在链接的页面上有一个变通办法,

https://github.com/angular/angular.js/issues/7874https://github.com/angular/angular.js/issues/7874#issuecomment-47647528

这是预期的行为。