要拥有一个大阵列的中继器,您不必看就可以观看所有项目。
您需要创建一个自定义指令,该指令使用一个参数和表达式到数组,然后在链接函数中仅监视该数组,然后让链接函数以编程方式刷新HTML(而不是使用ng-repeat)
类似于(伪代码):
app.directive('leanRepeat', function() {
return {
restrict: 'E',
scope: {
'data' : '='
},
link: function(scope, elem, attr) {
scope.$watch('data', function(value) {
elem.empty();
angular.forEach(scope.data, function(d) {
elem.append('<div>' + d + '</div>');
});
});
}
};
});
...这似乎是一种痛苦。
替代骇客方法
您也许可以循环浏览$scope.$$watchers
并检查$scope.$$watchers[0].exp.exp
它是否与您要删除的表达式匹配,然后通过一个简单的splice()
调用将其删除。这里的PITA是Blah {{whatever}} Blah
标记之间的东西将是表达式,甚至包括回车符。
从好的方面来说,您也许可以通过ng-repeat的$ scope循环并删除所有内容,然后显式添加所需的手表……我不知道。
无论哪种方式,似乎都像是骇客。
删除$ scope制造的观察者。
您可以$watch
通过$watch
调用返回的函数注销a :
例如,一次$watch
只能开火:
var unregister = $scope.$watch('whatever', function(){
alert('once!');
unregister();
});
当然,您可以随时调用unregister函数,这只是一个例子。
结论:确实没有一种很好的方法可以完全按照您的要求进行
但是要考虑的一件事:甚至值得担心吗?此外,将数千条记录加载到数十个DOMElement中真的是一个好主意吗?值得深思。
希望对您有所帮助。
编辑2(删除坏主意)