小透镜的角度重复渲染问题

时间:2017-08-26 18:32:06

标签: angularjs

我有以下两个对象:

...style.backgroundImage = `url(${objectURL})`;
// or 'url(' + objectURL + ')'

我有这个html模板(只是为了简化):

$scope.MyObj_1={ Id:"1", Title:"Title1", Items:[ { Id:"1", Comment:"Simple comment 1", } ] }; $scope.MyObj_2={ Id:"2", Title:"Title1", Items:[ { Id:"2", Comment:"Simple comment 2", }, { Id:"3", Comment:"Simple comment 3", }, { Id:"4", Comment:"Simple comment 4", } ] };

当我用MyObj_1值设置MyObj然后我用MyObj_2设置MyObj时,我得到的渲染问题与ng-repeat的缓慢有关。事实上,ng-repeat首先添加MyObj_2项,然后删除与MyObj_1相关的项目。

我尝试了ng-cloak和$ timeout,但行为仍然相同。

我想知道为什么ng-repeat首先不删除旧元素然后推送新元素。

2 个答案:

答案 0 :(得分:0)

Angular.copy使对象从源到目标克隆。它从目标对象中删除所有对象,然后从源复制属性。

Angular.merge将源对象附加到destination。如果目标对象已经有元素,它将保留在那里,源对象的新属性将添加到目标对象。

答案 1 :(得分:0)

如果您设置$scope.MyObj_2 = $scope.MyObj_1;,则会出现此行为 然后他们将在内存中指向相同的引用。

您需要使用的是angular.copy(),它会像这样创建一个源代码的深层副本

$scope.MyObj_2 = angular.copy($scope.MyObj_1);

另外,在重复你有一个typeo,应该是

<ul>
  <li ng-repeat="note in MyObj.Items" >{{note.Comment}}</li>
</ul>