【发布时间】:2018-07-14 14:06:28
【问题描述】:
我正在使用 vue.js 版本 2.5.13,使用 webpack-template 与 vue-cli 一起安装。
现在我想将生成的 App.vue-template 用于我的所有公共页面,并将另一个模板 AdminApp.vue 用于我的所有管理路由。
我的 router/index.js 是这样的:
import Vue from 'vue'
import Router from 'vue-router'
import LandingPage from '@/components/LandingPage'
import AdminDashboard from '@/components/admin/AdminDashboard'
Vue.use(Router);
export default new Router({
routes: [
{
path: '/',
name: 'LandingPage',
component: LandingPage
},{
path: '/admin/dashboard ',
name: 'AdminDashboard',
component: AdminDashboard
}
}
我的 main.js 是这样的:
import Vue from 'vue';
import App from './App.vue';
import AdminApp from './AdminApp.vue';
import router from './router';
if (window.location.href.includes('/admin/')) {
new Vue({
el: '#app',
router,
components: {AdminApp},
template: '<AdminApp/>'
});
} else {
new Vue({
el: '#app',
router,
components: {App},
template: '<App/>'
});
}
现在,如果我转到 localhost:8080/#/,然后通过 url 转到 localhost:8080/#/admin/dashboard,则管理面板不使用 AdminApp.vue-Template,而是使用 App.vue-Template。如果我刷新此页面,它会起作用。
你知道为什么吗?是否有针对不同路线使用两个或多个不同模板的最佳做法?
【问题讨论】:
-
你能用小提琴演示一下吗?或分享你的回购?
-
main.js是在每次路由更改时执行,还是仅在实际页面加载发生时执行? -
你做错了,根据路径不需要有 2 个 vue 实例,Vue 路由器会为你处理。让我尝试按照您的代码为您创建一个示例。
-
这里,这会让你知道你应该怎么做jsfiddle.net/o4dup5gu/10
-
谢谢@Craig,我遇到了同样的问题,这在 2020 年对我有帮助。
标签: vue.js vuejs2 vue-component vue-router