拥有一个带有大型阵列的中继器,您不会观看每个项目。
您需要创建一个自定义指令,该指令接受一个参数和数组的表达式,然后在链接函数中您只需观察该数组,并且您将让链接函数以编程方式刷新 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>');
});
});
}
};
});
......这似乎是一个痛苦的屁股。
替代hackish方法
您也许可以循环$scope.$$watchers
并检查$scope.$$watchers[0].exp.exp
它是否与您要删除的表达式匹配,然后通过简单的splice()
调用将其删除。这里的 PITA 是Blah {{whatever}} Blah
标签之间的内容将是表达式,甚至包括回车。
从好的方面来说,您可能只需遍历 ng-repeat 的 $scope 并删除所有内容,然后显式添加您想要的手表......我不知道。
无论哪种方式,这似乎都是一个黑客。
删除由 $scope.$watch 制作的观察者
您可以$watch
使用调用返回的函数取消注册 a $watch
:
例如,$watch
只有一次火灾:
var unregister = $scope.$watch('whatever', function(){
alert('once!');
unregister();
});
当然,您可以随时调用 unregister 函数……这只是一个示例。
结论:没有真正的好方法可以完全按照您的要求进行
但要考虑的一件事:它甚至值得担心吗?此外,将数千条记录分别加载到数十个 DOMElement 中真的是个好主意吗?深思熟虑。
我希望这会有所帮助。
编辑 2(删除了坏主意)