如何使用ng-repeat生成的幻灯片正确刷新Angular中的光滑轮播

时间:2017-01-31 15:01:56

标签: javascript angularjs slick.js

我有一个相当复杂的轮播,它是使用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变量,似乎也没有问题。不幸的是,我必须在现实场景中进行一些处理,所以如果不做一些重大修改我就不能使用这种方法。这总是一个选择,但我想弄清楚我在这里做错了什么。有什么想法吗?

0 个答案:

没有答案