创建没有ngRepeat的列表

时间:2014-08-29 12:45:27

标签: angularjs angularjs-directive angularjs-scope angularjs-ng-repeat

我想创建一个不需要ngRepeat的指令,因为指令上有一些额外的功能,这对ngRrepeat不起作用。

这是我的ng-repeat指令:

<div>
<ul>
    <li ng-repeat="item in items track by $index" ng-class="attrs.itemTheme" data-item="{{ item[attrs.itemId]}}">
        <div ng-include="attrs.tpl"></div>
    </li>
</ul>
</div>

attrs.tpl,nt-dimension是另一个使用ngRepeat中的items值的指令:

<script type="text/ng-template" id="dimension-item-tpl.html">
    <div nt-dimension x-attrs="item"></div>
</script>

没有ngRepeat:

<div> 
   <ul></ul>
</div>

有些人可以举个例子,我正在努力解决这个问题。

代码示例: http://jsfiddle.net/mato75/4zhLtjbw/

不工作的例子: http://jsfiddle.net/mato75/ztLhpf2g/

编译并附加ngIncluded模板,但问题是,它只编译最后一个模板,因为摘要周期会变慢。

var el = jqElm.find('ul');
scope.attrs.list.forEach(function (vl) {
    var tmp = 
        '<li class="' + attrs.itemTheme + '" data-item="' + vl.id + '">' +
            '<div ng-include="\'' + attrs.itemTpl + '\'"></div>' +
                '</li>';

    scope.item = vl; // this is to slow :(

    var b = $compile(tmp)(scope);
    el.append(b);
});

1 个答案:

答案 0 :(得分:1)

您需要为每个li手动创建一个自己的范围,因此每个项目都有自己的数据。

var ul = jqElm.find('ul');

scope.list.forEach(function (vl) {
var li = '<li><div ng-include="\'item-tpl2.html\'"></div></li>';
var newScope = scope.$new();
newScope.item = vl;
var cLi = $compile(li)(newScope);
ul.append(cLi);