【发布时间】:2016-04-11 20:19:04
【问题描述】:
我正在编写一个自定义指令。我在这方面做了很多例子,传递方法、对象、字符串等。但是现在我必须将 ng-repeat 的内容作为参数传递,我不能以任何方式传递它。详情如下:
我的指令的Javascript文件。如图所示,它有一个 fRepeat,它将 ng-repeat 的内容从外部范围传送到指令。
return {
restrict: 'E',
replace: true,
scope: {
fRepeat: '@',
fClick: '&'
},
transclude: true,
templateUrl: '/directives/f-list_jsp'
};
我的自定义指令的布局:
<div class="dataTable">
<ul class="list-unstyled">
<li ng-repeat="{{fRepeat}}" ng-click="fClick">
<div ng-transclude></div>
</li>
</ul>
</div>
这就是我在任何页面中使用指令的方式:
<f-list f-repeat="fund in funds track by $index" f-click="fCtrl.showDetails($index)">
<i class="fa fa-top fColor{{fund.risk}}"></i> {{fund.title}}
</f-list>
但是我总是得到错误:
collection中“item”形式的预期表达式[track by id]' 但得到了 'fRepeat'。
我尝试将其传递为:
Javascript 文件中的fRepeat: '&' 或fRepeat: '=' 无论如何都没有用。是否可以将其作为字符串传递,或者根本不可能?
【问题讨论】:
-
fRepeat 值中
'的意义何在?geRepeat来自哪里?请注意ng-repeat需要一个固定 表达式,而{{fRepeat}}在ng-Repeat之后进行评估,所以这不起作用。 -
就像提到的 zeroflagL 一样,您的 ng-repeat 无法接收动态表达式。但是,我很确定您可以将
collection作为参数传递,它应该可以工作。这对你来说是一个选择吗? -
@zeroflagL 这是我编辑的重复。我已经尝试了所有情况,有和没有
'。 -
@AdelaN,我一开始就是这么想的。但是集合的类型,要使用的集合的项目,以及行的布局总是会改变,所以我做不到。
-
一个简单的解决方案是使用
template函数而不是templateUrl。
标签: javascript html angularjs angularjs-directive angularjs-ng-repeat