排除在 Laravel-admin 使用 Vue 时,Pjax 干扰的问题

虽然用 Laravel-admin 开发 CRUD 很快速,但如果要需要使用 Vue 开发前端组件时,Pjax 就会干扰,让 Vue 出现了各式各样奇怪的问题。以下为解决方法:

本文介绍的方法是以 laravel-admin 与 vue 结合使用 为基础来修改的。

排除不使用 Pjax 刷新页面的后台路径

首先先新增 app/Admin/helpers.php

<?php

if (!function_exists('ignore_pjax_paths')) {
    /**
     * 排除不使用 Pjax 刷新页面的后台路径
     *
     * @param  array  $freshPaths
     * @return void
     */
    function ignore_pjax_paths($freshPaths) {
        $prefix = config('admin.route.prefix');

        $freshPathsJson = collect($freshPaths)->map(function ($path) use ($prefix) {
            return "/\/$prefix\/$path/";
        })->implode(',');
        $freshPathsJson = "[$freshPathsJson]";

        Admin::script(<<<EOT
$(document).on('pjax:start', function (e, contents, options) {
    const freshPaths = $freshPathsJson;
    for (let path of freshPaths) {
        if (options.url.search(path) !== -1) {
            location.reload();
            return false;
        }
    }
});
EOT
        );
    }
}

有了排除的方法后,就可以在 app/Admin/bootstrap.php 中调用,但参数必须符合正规表达式的格式,例如要排除的网址是http://example.test/admin/ignore/...,必需输入 ignore\/aaaa\/.*

...

include_once 'helpers.php';

ignore_pjax_paths([
    'ignore\/aaaa\/.*',
]);

此时访问以上页面时,将会重新从伺服器载入页面,Vue 也会正常运作了。

禁止表单使用 Pjax 送出

这个比较简单,自订一个 View 之后,在 <form> 标签中不要加 pjax-container 属性,就会以正常的 POST 方法送出。

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!