我有一个相当复杂的轮播,它是使用ng-repeat从使用ajax调用提供的数据的模板生成的。数据每分钟定期更新。这种方法有效,但最终浏览器会慢慢爬行并停止响应用户输入。
我创建了一个展示问题here的傻瓜。刷新是这样触发的:
var watch = $scope.$watch('items', function () {
// just a deep copy in place of more complex processing in the real world scenario
$scope.processeditems = angular.copy($scope.items);
// refresh carousel
if (slick.hasClass('slick-initialized')) {
console.log('unslicking');
slick.slick('unslick');
slick.slick(options);
}
});
显然,这个例子中的时间尺度被夸大了(另一方面,与我的真实世界场景相比,每个项目都有几层指令,演示文稿很简单)。几百次迭代后,刷新周期开始影响性能 - 尝试在编辑器面板中滚动代码以观察稳定恶化。这在我的原始代码中更加明显 - 只需要10-20次刷新就可以在那里变得明显。
问题仅在取消光滑/光滑时显现。如果我省略$ watch并将ng-repeat直接连接到原始$ scope变量,似乎也没有问题。不幸的是,我必须在现实场景中进行一些处理,所以如果不做一些重大修改我就不能使用这种方法。这总是一个选择,但我想弄清楚我在这里做错了什么。有什么想法吗?