拥有一个带有大阵列的中继器,您不必观看每个项目。
您需要创建一个自定义指令,该指令接受一个参数和数组的表达式,然后在链接函数中您只需观察该数组,并且让链接函数以编程方式刷新 HTML(而不是使用ng-重复)
类似于(伪代码):
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 的 $scope 并删除所有内容,然后显式添加您想要的手表......我不知道。
不管怎样,这看起来就像是黑客攻击。
删除 $scope.$watch 生成的观察者
您可以取消注册$watch
与返回的函数$watch
call:
例如,要有一个$watch
只开火一次:
var unregister = $scope.$watch('whatever', function(){
alert('once!');
unregister();
});
当然,您可以随时调用取消注册函数...这只是一个示例。
结论:没有什么好方法可以完全满足您的要求
但需要考虑一件事:这值得担心吗?此外,将数千条记录分别加载到数十个 DOMElement 中真的是个好主意吗?值得深思。
编辑2(删除坏主意)