如何显示刀片中的组件?

时间:2019-05-16 11:03:10

标签: laravel vue.js laravel-5

为什么我的应用代码无法在Laravel中使用? 如果我设置地址/admin,则一切正常,并显示admin.blade.php模板 并且如果我设置了admin/one,它会显示admin.blade.php,但不会显示应用程序中的内容

这有效:

Route::get('/admin','AdminController@index')->middleware(['auth', 'auth.admin']);
<body>
it's work
<div id="app">
    it's working
    <router-view></router-view>
</div>
<script src="js/app.js">

</script>
</body>

但这不是:

Route::get('/admin/one','AdminController@index')->middleware(['auth', 'auth.admin']);
<body>
it's work
<div id="app">
    it's not working
    <router-view></router-view>
</div>
<script src="js/app.js">

</script>
</body>

1 个答案:

答案 0 :(得分:1)

问题在于Laravel和Vue的路线不相同。 Vue路线有点虚。它们仅存在并在浏览器中工作。 Vue用于单页应用程序-aka SPA。

为使其正常工作,您应该更改管理路径以匹配以“ / admin”开头的任何内容

所以,您的路线应为:

Route::get('/admin/{param?}','AdminController@index')->where('param', '(.*)')->middleware(['auth', 'auth.admin']);

,它应随vue应用程序一起返回刀片视图。 然后,您的Vue应用程序应根据请求的路线显示请求的页面。这就是vue-router的用途。 并且所有或您的管理页面和布局都应由Vue处理。 在您的Vue的resources / js / router / index.js中(我想您使用Laravel Mix)

export const routes = [
    {
        path: '/',
        component: MainLayoutComponent,
        redirect: { name: 'home' },
        children: [
            {
                path: 'home',
                name: 'home',
                component: AdminHome,
                meta: {
                    title: 'Main Page'
                },
            },
        ]
    }
];
const router = new Router({
    routes,
    base: '/admin', 
    mode: 'history',
});