0

在一个视图中,我有一个使用 Angular cdkDrag 在仪表板上移动元素的组件。

该组件的数据是从订阅 SignalR Hub 的父级(通过单向绑定)向下传递的。

我遇到的问题是在接收到有效负载时,如果任何元素已被移动,它们就会重置回默认的 UI 布局(就像您刷新了页面一样)。

有没有办法阻止这种情况?

我是否需要将新位置存储在缓存中,并在接收到有效负载后,应用前一个位置(来自缓存)?

下面是显示该问题的 StackBlitz。该项目的结构与我的相似: https ://stackblitz.com/edit/angular-cdk-drag-columns-ldd9n2

4

1 回答 1

0

所以我发现了这个问题,这似乎是 Ngfor “重建” DOM 的一种行为。

详细信息可以在这里找到:

https://malcoded.com/posts/angular-ngfor/

https://angular.io/guide/template-syntax#ngfor-with-trackby

基本上是为了解决这个问题,我将它添加到 html 中:

<div *ngFor="let item of items; trackBy: trackByItems">
  ({{item.id}}) {{item.name}}
</div>

这在 components.ts 中:

trackByItems(index: number, item: Item): number { return item.id; }

希望这可以帮助。

于 2019-09-05T13:16:42.357 回答