【发布时间】:2022-12-25 18:41:28
【问题描述】:
我已经实现了可以通过角度材料拖放功能拖放的元素列表 就像在教程https://material.angular.io/cdk/drag-drop/overview
我已经实现了函数 drop(event) 但是在我的例子中我不仅需要移动角度模型中的元素。我需要向服务器发送请求,当服务器响应时更新它。所以我的功能没有改变任何东西,它创建了对服务器的请求。
这里的问题是,因为角度模型在 drop 函数中没有改变,所以会发生元素“跳跃”:在元素 drop 元素返回到它原来的位置之后,当来自服务器的响应到来并且模型被更新时,元素移动到新位置。对于用户来说,看到它是非常痛苦的
我想以某种方式向用户隐藏某些工作正在后台进行。
- 有一个用于用户的重复列表和另一个用于服务器的列表并更新它们的想法(删除时的用户列表和响应时的服务器列表)我留作最后决定,因为它很难维护。
我试图用 css 动画来解决它。正如您在拖放示例中看到的那样,它使用
.cdk-drag-animating { transition: transform 250ms cubic-bezier(0, 0, 0.2, 1); }“transition: transform” 在用户放下元素时显示流畅的动画。所以我想展示大约 0.5 秒的用户动画。这个时间应该足以让服务器响应,并且当动画完成时模型已经更新。
我看到的是
(cdkDropListDropped)="drop($event)"drop 函数在过渡结束后被调用。所以即使我做 transform 2000ms drop 函数也会在转换结束后被调用,所以在 2s 之后。是预期的吗?我认为应该在鼠标释放后调用函数。
你对最初的问题(隐藏模型更新)有什么想法,特别是这个 css 动画过渡问题吗?
更新: 我已经创建了我的问题的例子 https://stackblitz.com/edit/angular-3nhsxx?file=src%2Fapp%2Fcdk-drag-drop-disabled-sorting-example.css,src%2Fapp%2Fcdk-drag-drop-disabled-sorting-example.ts
【问题讨论】:
标签: css angular angular-material drag-and-drop