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

Inertia.js删除路由未触发onSuccess(),DataTable无法重建

问题分析

当控制器返回重定向时,Inertia会导航到目标页面,原组件实例会被销毁,你定义在destroy请求里的onSuccess回调所在的上下文已不存在,因此无法触发,导致DataTable无法重建。

解决方案

方案一:返回成功响应而非重定向,前端本地更新数据

这种方式不需要页面跳转,直接在请求成功后更新本地数据并重建DataTable。

前端代码修改

deleteSubmit(id) {
    this.accountsDataTable.destroy();
    // 提前过滤出删除后的数据集
    const updatedInstallers = this.installers.filter(item => item.id !== id);
    
    Inertia.destroy(route('installers.destroy', {id: id}), {}, { 
        onSuccess: () => {
            // 更新本地数据
            this.installers = updatedInstallers;
            // 重建DataTable
            this.accountsDataTable = $('#table').DataTable({
                columnDefs: [{
                    target: 1
                }]
            });
            // 手动提示删除成功
            console.log('Installer was successfully deleted.');
        }
    })
},

后端控制器修改

// 执行删除逻辑后
return response()->json(['success' => 'Installer was successfully deleted.']);

方案二:保留重定向,在组件生命周期钩子中初始化DataTable

重定向回列表页时,组件会重新挂载,将DataTable的初始化逻辑放到生命周期钩子中,确保页面刷新后自动重建表格。

前端组件代码

export default {
    data() {
        return {
            accountsDataTable: null
        }
    },
    props: {
        installers: {
            type: Array,
            required: true
        }
    },
    mounted() {
        this.initDataTable();
    },
    beforeUnmount() {
        // 组件卸载前销毁DataTable,避免内存泄漏
        if (this.accountsDataTable) {
            this.accountsDataTable.destroy();
        }
    },
    methods: {
        initDataTable() {
            this.accountsDataTable = $('#table').DataTable({
                columnDefs: [{
                    target: 1
                }]
            });
        },
        deleteSubmit(id) {
            Inertia.destroy(route('installers.destroy', {id: id}), {}, { 
                preserveScroll: true // 可选:保留当前滚动位置
            })
        }
    }
}

后端控制器保留原重定向

// 执行删除后
return redirect()->route('installers.index')->with('success', 'Installer was successfully deleted.');

注意:无需设置preserveState: true,否则会保留旧组件状态,导致新数据无法及时渲染。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 12:45:41