角度消化循环和非常大的模型

时间:2016-09-13 08:46:28

标签: angularjs angular-digest

我有1000个根项目。每个项目都有4个子项目。这些项目中的每一个都有2个可以编辑的约100个元素的集合。 这些元素是延迟加载的,但在最坏的情况下可能会有:1000 * 4 * 2 * 100 = 800k元素可以编辑。

如果有任何版本,我想要启用按钮。 我在每个级别编写函数来确定元素是否被编辑,以及父元素是否有任何编辑过的元素。 root容器还有isEdited函数,它启用/禁用按钮。

但是在每个摘要循环上调用此函数似乎并不是最佳的,因为版本不经常发生。

这个问题有角度解决方案吗? 我的意思是在knockout.js中,父属性可以观察子属性并仅在编辑时更改其值。 所以在我的情况下,isEdition将不会在每个摘要循环上计算。但在版本发生时更新。

我对我的代码进行了分析,发现isEdited()函数需要大部分时间。

2 个答案:

答案 0 :(得分:0)

你试过吗

$scope.$watch('bigObjectWithNesting', 
    function(newV, oldV) { $scope.isEditedFlag = ...; },
    true);

或您的方法调用。并在HTML中使用isEditedFlag

答案 1 :(得分:0)

如果你watch,它将始终在每个摘要上计算。您可以在每个根元素上使用ng-change并将isEditing标志设置为true。您可能需要更多的东西,但这可能是我认为的一种方法。