0

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

在 I 的$compile功能中,repeat-this将所有内容包装在一个

<div class="repeatable" ng-repeat="item in collection">contents go here<div>

以便 AngularJS 为我负责复制元素、范围等。

但是,这个集合的名称是用指令声明的,myCollectionName并且可以根据指令的位置而改变(有一些 ng-includes 可以包含更多myCollectionName,但这个名称的使用者应该只使用层次结构中最接近的一个)。我可以使用父元素中的指令控制器获取集合的名称,但它仅在 postLink 函数中可用,repeat-this并且我无法修改该item in collection部分以使其类似于item in studentsor item in tickets。这样做的好方法是什么?

4

1 回答 1

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"

于 2013-07-03T11:06:07.330 回答