排除在 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 协议》,转载必须注明作者和本文链接
 
           ycs77_Lucas 的个人博客
 ycs77_Lucas 的个人博客
         
             
                     
                     
           
           关于 LearnKu
                关于 LearnKu
               
                     
                     
                     粤公网安备 44030502004330号
 粤公网安备 44030502004330号 
 
推荐文章: