PAYATHON 2026

Laravel Vue Inertia 删除操作为何弹出“1”?

数据阿明

结论

从给出的代码看,confirm("Are you sure you want to delete this record?") 返回布尔值 true 或 false,不会把确认结果显示成“1”。控制器删除记录后会重定向并设置成功提示,也没有直接返回数字。仅凭这两段代码,无法确定“1”弹窗是从哪里来的。需要先确认它是浏览器原生弹窗,还是页面中的自定义模态框。

当前删除入口使用了 <Link href="#">。删除操作不需要链接跳转,改成按钮可以避免 href="#" 带来的额外页面行为。

调整 Vue 删除入口

可以使用 Inertia 的 router.delete(),并将按钮的 type 设为 "button":

<script setup>
import { router } from "@inertiajs/vue3";

function destroy(id) {
    if (!window.confirm("Are you sure you want to delete this record?")) {
        return;
    }

    router.delete(route("article_categories.destroy", { id }), {
        preserveScroll: true,
        onSuccess: () => {
            // 删除成功后由页面显示服务端传回的提示
        },
        onError: (errors) => {
            console.error("删除请求失败:", errors);
        },
    });
}
</script>

<template>
    <tbody>
        <tr
            v-for="articleCategory in articleCategories.data"
            :key="articleCategory.id"
        >
            <td>{{ articleCategory.title }}</td>
            <td>
                <div class="flex gap-2 justify-end">
                    <TableEditButton
                        :href="route('article_categories.edit', articleCategory.id)"
                    />
                    <button
                        type="button"
                        @click="destroy(articleCategory.id)"
                    >
                        Delete
                    </button>
                </div>
            </td>
        </tr>
    </tbody>
</template>

如果继续使用 useForm(),也可以保留 form.delete()。把触发删除的 <Link href="#"> 换成按钮,并检查是否有其他代码把删除结果或确认值传给模态框。

检查“1”的来源

  1. 先看弹窗的样式和内容。如果是浏览器原生 confirm(),会显示确认提示以及浏览器提供的确认、取消按钮。confirm() 的返回值只会交给 JavaScript 代码,不会自动显示在弹窗里。
  2. 在项目中搜索 confirm(、alert(、模态框组件,以及页面中显示变量值的代码,检查是否有其他位置把 1 设为弹窗内容。
  3. 在浏览器开发者工具的 Network 面板中查看删除请求的响应。如果响应正文是 1,再检查对应控制器或中间件是否返回了布尔删除结果。Laravel 的模型 delete() 返回布尔值,但给出的控制器没有把这个返回值作为 HTTP 响应返回。
  4. 检查成功提示的显示逻辑。控制器设置了 message flash 值,前端还需要通过应用已有的 Inertia 共享数据或页面 props 读取并展示它;否则提示不会自动显示成弹窗。

控制器

当前控制器会查找记录、删除记录,然后重定向并设置提示:

public function destroy($id)
{
    $articleCategory = ArticleCategory::findOrFail($id);
    $articleCategory->delete();

    return redirect()
        ->route('article_categories')
        ->with('message', 'Article category deleted successfully.');
}

请核对 article_categories 是否是实际存在的路由名称,并确认前端读取的是同一个 message flash 键。如果弹窗仍显示“1”,需要结合弹窗来源和 Network 响应继续判断。现有代码片段不足以确定是哪段代码产生了这个数字。

备注:内容仅供参考。