排除在 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 协议》,转载必须注明作者和本文链接
推荐文章: