在$ compile阶段更改ng-repeat中的集合名称

时间:2013-07-03 09:40:19

标签: angularjs angularjs-directive

我有一个让事情可重复的指令。例如,<div repeat-this><p>hey</p></div>将重复<p>hey</p>,例如5次。

$compile的{​​{1}}函数中,我将所有内容包装在

repeat-this

这样AngularJS就可以为我复制元素,范围等。

但是,此集合的名称是使用指令<div class="repeatable" ng-repeat="item in collection">contents go here<div> 声明的,并且可以根据指令的位置进行更改(有一些ng-includes可以包含更多myCollectionName但是此名称的使用者应该只使用层次结构中最接近的一个)。我可以在父元素中使用指令控制器获取集合的名称,但是它仅在myCollectionName的postLink函数中可用,我无法修改repeat-this部分使其像{ {1}}或item in collection。这样做的好方法是什么?

1 个答案:

答案 0 :(得分:1)

从指令范围内访问属性时,不应直接访问该属性。

例如(在指令中):

scope.myProperty = 'myval';

您应该将属性的名称作为参数传递给指令:

<div myDirective="myProperty">

在您的指令中,您可以使用传入的参数来访问该属性:

link: function postLink(scope, element, attrs) {
  var propertyAccessor = $parse(attrs.myDirective);

  propertyAccessor.assign(scope, 'myval');
}

使用$ parse很重要,因为它允许您使用实例myDirective="item.myProperty"

的嵌套属性