5

我的应用程序存在严重的性能问题。我正在使用角度和 ng-grid。在阅读了为什么我的应用程序运行缓慢之后,我被指示使用bindonce指令来克服潜在的 Angular 性能问题。

所以我在我的解决方案中添加了 bindonce.js 并在我的模块中注入了指令

HomeIndexModule = angular.module("HomeIndexModule", ['ngGrid', 'pasvaz.bindonce']);

我在标记中使用如下

<div class="gridStyle " bindonce data-ng-grid="gridOptions"></div>

我不确定这是否真的解除了网格的绑定。

问题 1:有没有人经历过这个过程可以指导我如何做到这一点,因为我只能在 bindonce 网站上找到 ng-repeat 的示例。

问题2:如何验证bindonce是否真正起作用?

4

3 回答 3

4

我在其他帖子中提到过两次,我创建了自己的bind-once指令,它很小并且做得很好,我个人认为插件过于复杂。

看一下这个

app.directive('bindOnce', function() {
    return {
        scope: true,
        link: function( $scope ) {
            setTimeout(function() {
                $scope.$destroy();
            }, 0);
        }
    };
});
<div class="gridStyle" bind-once ng-grid="gridOptions"></div>

演示:http ://plnkr.co/edit/4cBOEG?p=preview

类似帖子:

真正阻止元素绑定 - 取消绑定元素 - AngularJS

于 2013-10-25T20:38:18.467 回答
3

此更改修复了性能滞后,更改是注释掉 ng-grid.js 行号 1420 中的 self.resizeOnData()。

$scope.$on("ngGridEventData", function () {
//self.resizeOnData(temp);

Chrome 事件分析器显示此方法被调用了太多次,并且看起来它正在调整网格中所有单元格的大小以更改数据源。我仍在测试以发现副作用,但直到现在所有以前的功能都在工作,性能比我以前的功能提高了 5 倍。

如果您看到此更改破坏了其他任何内容,请告诉我

于 2013-10-29T20:06:13.533 回答
1

您应该彻底阅读文档。使用只是bindonce不会给你你想要的效果。看看我创建的这个例子:http: //plnkr.co/edit/GXkLWfFpfdJvPVyRMtpO -$timeout用于每秒调用$apply一次。两个元素绑定到相同的函数,这些函数记录以控制作为参数传递的文本。如您所见,使用 justbindonce不起作用 - just bindonce文本仍在记录中,而bo-text仅出现一次。bo-text等之一bo-html必须用于实现绑定一次。

因此,在您的情况下,您需要修改指令的模板ngGrid并用指令替换您想要的每个普通绑定bo-*。这里:如何在 ng-grid 列标题中呈现 html 格式的文本我已经解释了如何做到这一点。

于 2013-10-25T18:42:04.913 回答