You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue使用vuedraggable拖拽后如何强制嵌套Task组件重新渲染?

问题根因

你当前只更新了后端的任务状态,前端本地tasks数组中对应任务的status属性并未修改,Vue是响应式驱动UI,数据源没有变化的情况下,Task组件自然会展示旧值。

解决方法

方案1:同步本地数据源(最优推荐)

拖拽接口调用成功后,直接更新本地tasks中的对应任务数据,或者重新拉取全量任务数据,保证前后端数据一致,UI会自动刷新。
修改TaskTable的endDrag方法如下:

endDrag: function (event) {
    const that = this
    const taskId = parseInt(event.item.id)
    let column = event.to.parentElement.parentElement
    const newStatus = column.id
    $.ajax({
        url: '/tasks/change-status',
        type: 'POST',
        data: {'task_id': taskId, 'status': newStatus},
        success: function (data) {
            if (data.success) {
                // 方法1:直接修改本地对应任务的status,响应式更新UI
                // 遍历所有状态下的任务,找到对应id的任务修改状态
                for (let status in that.tasks) {
                    const taskIndex = that.tasks[status].findIndex(t => t.id === taskId)
                    if (taskIndex > -1) {
                        that.tasks[status][taskIndex].status = newStatus
                        break
                    }
                }
                // 方法2:更稳妥,直接重新拉取最新任务列表,完全同步后端
                // that.loadTasks()
                
                Toastify({
                    text: "Task status has been successfully updated!",
                    duration: 3000,
                    destination: base_url + '/tasks' + "show/" +  event.item.id,
                    newWindow: true,
                    close: true,
                    className: 'custom-toast',
                    gravity: "top",
                    position: "center",
                    backgroundColor: "linear-gradient(to right, #00b09b, #96c93d)",
                    stopOnFocus: true,
                    onClick: function () {}
                }).showToast();
            }
        }
    });
}

方案2:强制重新渲染Task组件(可选)

如果不想修改数据源,也可以通过修改组件key的方式让Vue销毁旧组件、重新创建新组件实现刷新:
修改TaskTable模板中Task组件的key属性,拼接任务状态:

<task v-for="task in tasks[status]" :task="task" :key="`${task.id}-${task.status}`"></task>

只要任务状态变化,key就会变化,Vue会自动重新渲染该Task组件,加载最新数据。

额外优化点

你当前的Task组件中注册了draggable组件但没有实际使用,可以直接移除这部分冗余代码。


内容的提问来源于stack exchange,提问作者Kaloyan Nikolov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.19 23:15:08