angularjs – 如何“解开”一个表达式

我有一个大的数组ng-repeat。

当ng-repeat运行时,它将该数组的每个元素添加一个独立的作用域中,同时使该数组本身在作用域中。这意味着$ digest检查整个数组的变化,最重要的是,它检查数组中的每个单独的元素的变化。

this plunker作为我所说的例子。

在我的用例中,我从来没有改变我的数组的单个元素,所以我不需要让他们看。我将只更改整个数组,在这种情况下,ng-repeat将重新呈现它的整个表。 (如果我错了,请让我知道..)

一个(比如说)1000行的数组中,还有1000个表达式,我不需要求值。

如何在观察主数组的同时从观察者注销每个元素?

也许而不是取消注册我可以有更多的控制我的$ digest,并以某种方式跳过每一行?

这种具体情况实际上是一个更普遍的问题的例子。我知道$watch returns a ‘deregisteration’ function,但这并没有帮助,当指令是注册手表,这是大部分时间。

要有一个大型阵列的中继器,你不看看每一个项目。

你需要创建一个自定义指令,它接受一个参数和表达式到你的数组,然后在链接函数中你只是看着那个数组,你将有链接函数以编程方式刷新HTML(而不是使用ng重复)

类似(psuedo-code):

app.directive('leanRepeat',function() {
    return {
        restrict: 'E',scope: {
           'data' : '='
        },link: function(scope,elem,attr) {
           scope.$watch('data',function(value) {
              elem.empty(); //assuming jquery here.
              angular.forEach(scope.data,function(d) {
                  //write it however you're going to write it out here.
                  elem.append('<div>' + d + '</div>');
              });
           });
        }
    };
});

…这似乎在屁股的痛苦。

替代性黑客方法

你可以循环遍历$ scope。$$ watchers并检查$ scope。$$ watchers [0] .exp.exp看看它是否匹配你想删除的表达式,然后用一个简单的splice )调用。 PITA在这里,是类似Blah {{whatever}}标签间的Blah将是表达式,甚至包括回车。

在上面,你可能可以循环通过你的ng-repeat的$范围,只是删除一切,然后明确地添加你想要的手表…我dunno。

无论哪种方式,它似乎是一个黑客。

删除由$ scope。$ watch创建的监视器

您可以使用$ watch调用返回函数取消注册$ watch:

例如,有一个$ watch只有一次fire:

var unregister = $scope.$watch('whatever',function(){ 
     alert('once!');
     unregister();
});

你可以,当然调用unregister函数任何时候你想…这只是一个例子。

结论:没有真正的伟大的方式来做你所要求的

但有一点需要考虑:它是否值得担心?此外,它真的是一个好主意有成千上万的记录加载到几十个DOMElements每个?食物思想。

我希望有所帮助。

编辑2(删除坏主意)

相关文章

ANGULAR.JS:NG-SELECTANDNG-OPTIONSPS:其实看英文文档比看中...
AngularJS中使用Chart.js制折线图与饼图实例  Chart.js 是...
IE浏览器兼容性后续前言 继续尝试解决IE浏览器兼容性问题,...
Angular实现下拉菜单多选写这篇文章时,引用文章地址如下:h...
在AngularJS应用中集成科大讯飞语音输入功能前言 根据项目...
Angular数据更新不及时问题探讨前言 在修复控制角标正确变...