Laravel Vue VueRouter 历史模式

Posted

技术标签:

【中文标题】Laravel Vue VueRouter 历史模式【英文标题】:Laravel Vue VueRouter history mode 【发布时间】:2020-06-26 07:11:36 【问题描述】:

我正在用 laravel、vue 和 vue 路由器构建一个电子商务项目

我想在历史模式下使用 vue 路由器,但它给我带来了麻烦。

这是我的代码

new Vue(
    el: '#app',
    router: new VueRouter(
        mode: 'history',
        routes
    )
);

这是我在 web.php 中的路由,其中​​包含语言环境中间件

Route::group(['prefix' => 'locale', 'where' => ['locale' => '[a-zA-Z]2'], 'middleware' => 'setlocale'], function () 
    Route::view('/path?', ('layouts.app'))->where('path', '.*');
);

这是我使用 vue 路由器的路线

export const routes = [
    
        path: '/',
        component: require('./components/Page/HomePage').default,
    ,
    
        path: '/product',
        component: require('./components/Page/Product/ProductPage').default,
    ,
];

我需要我的网址

http://localhost/en

而不是(带有标签)

http://localhost/en#/

使用历史模式后,我成功删除了主题标签。但是,其他的路由器链接会在我的 url 中删除我的语言环境

http://localhost/product

我现在不知道该怎么办。 请帮忙~谢谢。

2020 年 3 月 19 日更新

【问题讨论】:

【参考方案1】:

您需要设置 base 值来告诉 Vue Router 您的应用程序的基本 URL 是什么。在您的情况下,您可以使用语言环境值动态设置它。

例如,在您的 Blade 模板中,您可以使用以下脚本在 javascript window 对象上设置语言环境值:

<script>
    window._locale = " app()->getLocale() ";
</script> 

然后您可以在创建路由器时将base 值设置为区域设置:

router: new VueRouter(
  mode: 'history',
  base: `/$window._locale/`,
  routes
)

【讨论】:

我试过了,但仍然显示启用历史模式的空白页面.. 什么意思?您没有在问题中提及空白页。 @BlackLotus 我在Github为你创建了一个演示。 我试过你的演示 ''localhost/clone/public/en/home'' 但你的演示也显示空白不是吗? 非常感谢。它非常重要,但遗憾的是在 Vue 路由器指南中没有提及,仅在 API 参考中提及:router.vuejs.org/api/#base【参考方案2】:

非常简单的方法也是接受 Vue 路由器中的语言环境。所以你的路线是这样的:

export const routes = [
    
        path: '/:locale',
        children: [
        
            path: '',
            component: require('./components/Page/HomePage').default,
        ,
        
            path: 'product',
            component: require('./components/Page/Product/ProductPage').default,
        ,
        ]
    
];

请确保儿童路线不要在开头放置“/”,因为它会删除语言环境

【讨论】:

以上是关于Laravel Vue VueRouter 历史模式的主要内容,如果未能解决你的问题,请参考以下文章

vue-ts 中的“VueRouter”类型上不存在属性“历史”

Vueify / VueRouter / Laravel - 未定义组件

如何在 Laravel 中的某些页面上初始化 Vuejs + VueRouter

Vue系列:Vue Router 路由梳理

VueRouter 未定义

VueRouter 第一个路由