angular2砌体总是在末端添加项目,而不是按照正确的顺序添加项目
使用时,它将按照正确的初始顺序(即它们在angular2砌体总是在末端添加项目,而不是按照正确的顺序添加项目,angular,masonry,Angular,Masonry,使用时,它将按照正确的初始顺序(即它们在ngFor的数组中出现的顺序)绘制砖块,但是当从订阅中获得新数组并且它有一个新项目(甚至只是一个更改的项目)时,新/更改的项目总是附加到末尾,而不是放在正确的位置(它在阵列中的位置) 在订阅中获取数组,如下所示: this.thingService.getThings().takeUntil(this.unsubscribe) .subscribe( (things:IThing[]) => { thi
ngFor
的数组中出现的顺序)绘制砖块,但是当从订阅中获得新数组并且它有一个新项目(甚至只是一个更改的项目)时,新/更改的项目总是附加到末尾,而不是放在正确的位置(它在阵列中的位置)
在订阅中获取数组,如下所示:
this.thingService.getThings().takeUntil(this.unsubscribe)
.subscribe( (things:IThing[]) => {
this.things = things;
/*This should reload and resort the things, but it doesn't.*/
if (this.masonry){
this.debug("yes this is being called");
this.masonry._msnry.reloadItems();
this.masonry.layout();
}
});
此订阅工作正常,如果我输出内容,则它们将按正确顺序按预期进行。出于绝望,我正在调用砌体上的重新加载项目
和布局
(从@ViewChild(angularproash)private-mashine:angularproash;
)。调用成功且无错误,但项仍不会按其在数组中的显示顺序绘制
以下是我的HTML模板:
<masonry *ngIf="things && things.length" [options]="{ }">
<masonry-brick *ngFor="let thing of things" >
Hi, my name is {{thing.name}}
</masonry-brick>
</masonry>
嗨,我的名字是{{thing.name}
同样,需要澄清的是,在初始加载(由同一订阅驱动)时,项目的顺序是正确的
另一个注意事项-如果我更改(或添加)了另一个项目,则错误附加到末尾的前一个项目现在将正确排序在其正确位置,并且新项目位于末尾(无论是否应该)。因此,在任何时候,只有一项不合适。我发现我可以通过对砌体调用进行此更改来解决此问题(特别是将它们放在setTimeout
调用中):
请注意,这两个调用都是必需的。layout
本身不会更改任何内容,reloadItems
最终将使其正确排序,但某些事件必须首先触发layout
我仍然有兴趣了解原因。在我调用reloadItems
和layout
时,即使没有setTimeout
,数组也已更新,新内容应立即可用于重新加载
…因此,我发布此答案是为了帮助其他有相同问题的人,但了解这里实际发生的情况仍然很好。我发现我可以通过对砌体调用进行此更改来解决此问题(特别是将它们放在setTimeout
调用中):
请注意,这两个调用都是必需的。layout
本身不会更改任何内容,reloadItems
最终将使其正确排序,但某些事件必须首先触发layout
我仍然有兴趣了解原因。在我调用reloadItems
和layout
时,即使没有setTimeout
,数组也已更新,新内容应立即可用于重新加载
…因此,我发布此答案是为了帮助其他有相同问题的人,但如果能够了解这里实际发生的情况,那就太好了。当您运行reloadItems时,视图尚未更新。请参阅当您运行reloadItems时,视图尚未更新。请参阅
setTimeout( () => {
if (this.masonry){
this.masonry._msnry.reloadItems();
this.masonry.layout();
}
});