【发布时间】:2020-08-02 19:23:29
【问题描述】:
我正在使用 Laravel + Vue.js 编写网站代码。我需要两个部分:
在 resource/js/app.js 我包括两个主要组件:
require('./bootstrap');
import VueRouter from "vue-router";
import Frontend from "./frontend/Index";
import Admin from "./backend/Index";
import router from "./routes";
window.Vue = require('vue');
Vue.use(VueRouter);
const app = new Vue({
el: '#app',
router,
components: {
"index": Frontend,
"admin": Admin,
}
});
在 routes.js 文件中:
import VueRouter from 'vue-router';
import Home from './frontend/Dashboard';
import Authors from './frontend/authors/Authors';
import Admin from './backend/Dashboard';
const routes = [
{
path: "/",
component: Home,
name: "home",
},
path: "/authors",
component: Authors,
name: "authors",
},
{
path: "/admin",
component: Admin,
name: "admin",
}
]
const router = new VueRouter({
routes,
mode: "history",
})
export default router;
问题是,如果我通过浏览器打开https://www.example.com/authors,它会使用正确的模板正确加载。但是,如果我从管理部分单击它,它会加载到管理模板中。
文件是这样排列的:
- 资源
- js
- 后端
- Index.vue
- 仪表板.vue
- 前端
- Index.vue
- 仪表板.vue
- 作者
- Authors.vue
当我在 www.example.com 时,加载的主要布局是 resource/js/frontend/Index.vue。
当我在 www.example.com/admin 中时,加载的主要布局是 resource/js/backend/Index.vue
如果我通过浏览器使用 url,则主布局会正确加载。我如果我使用
<router-link class="btn nav-button" :to="{name: 'authors'}">Author</router-link>
从管理部分加载组件作者,但在管理布局中而不是在前端布局中。
【问题讨论】:
-
没有看到你的“管理员”和“作者”组件之间的区别,很难看出为什么它在一种情况下与另一种情况相比会失败。 Vue-router 更改了地址栏中的 URL,但您实际上并没有被重定向到任何地方(因此浏览器不会加载其他布局组件)。因此,使用您的示例代码,您将在来自
example.com的frontend/index布局中加载backend/dashboard,但在直接请求example.com/admin时加载backend/index。这可能是您看到的意外行为? -
@Excalibaard 我更新了问题。我希望它更清楚。
-
是的,我当时理解正确。请参阅我的答案的第一部分:因为您的布局是在初始页面加载时加载的,并且 vue-router 不会重新加载/重定向页面,而只会更改地址栏中的明显 URL,因此它不会加载您所在的页面定义了其他布局。
-
谢谢@Excalibaard 我明白了这个问题。
标签: javascript vue.js vue-component