Angularjs 不使用ng repeat的数组的指令

Angularjs 不使用ng repeat的数组的指令,angularjs,angularjs-directive,ng-repeat,Angularjs,Angularjs Directive,Ng Repeat,我又一次发现ng repeat的性能很慢,并且不知道如何构建一个指令来呈现元素数组,而不在任何地方(甚至在模板中)使用ng repeat 你们是怎么做到的 即使我遍历数组,对每个元素使用模板: .directive('foo', function($parse, $compile) { return { restrict: 'E', scope: { items: '=myarray' }, link: function (sc

我又一次发现
ng repeat
的性能很慢,并且不知道如何构建一个指令来呈现元素数组,而不在任何地方(甚至在模板中)使用
ng repeat

你们是怎么做到的

即使我遍历数组,对每个元素使用模板:

.directive('foo', function($parse, $compile) {
    return {
        restrict: 'E',
          scope: { items: '=myarray' },
            link: function (scope, element, attrs){
                 var tmplt = '<div> {{name}} </div>';
                 scope.items.forEach(function(){
                     element.append(tmplt(scope)); 
                     // now I'd like to have a scope of that element, 
                     // and pass it into the template, and use properties related 
                     // only to that element
                     // but I don't know how to get a scope for a child element
                  });

             scope.$watch(attrs.myarray, function(value) { console.log('something change'); })

            }
        }});
指令('foo',函数($parse,$compile){ 返回{ 限制:'E', 作用域:{items:'=myarray'}, 链接:函数(范围、元素、属性){ var tmplt='{{name}}'; scope.items.forEach(函数(){ 追加(tmplt(范围)); //现在我想知道这个元素的范围, //并将其传递到模板中,并使用相关属性 //仅适用于该元素 //但我不知道如何获得子元素的作用域 }); 作用域.$watch(attrs.myarray,函数(值){console.log('something change');}) } }});
如果我选择为所有元素使用一个模板,那么我也别无选择,只能在其中使用
ng repeat
,它将创建ngRepeatWatchers,并且一切都会再次变慢。

虽然我同意@Mark,但对于您的问题,这里有一个肮脏的解决方案:

其思想是创建独立的子作用域:

              scope.items.forEach(function(item){                     
                 var childScope = scope.$new(true);                     
                 angular.extend(childScope, item);
                 element.append($compile(tmplt)(childScope)); 
              });
并且不要忘记在每次刷新时删除这些子作用域


这个解决方案需要进行基准测试,看看它是否更快,以及与ngRepeat相比有多快。

每个{{name}}将设置一个$watch。我不认为这会比ng repeat快多少,特别是考虑到您还希望每个项目都有一个单独的范围。阵列是否需要动态更改?你能给你的数据分页吗?