javascript - 如何使用VueRouter在Vuetify的NavigationDrawer右侧显示组件?
问题描述
在我的 VueJS 项目中,我有一个机制来显示基于使用 Firebase 和状态 (vuex) 登录的内容,如果用户登录,则使用v-if
. 因此,此时我可以将 aNavigationDrawer
放在正确的位置,但无法在正确的位置显示组件。目标是NavigationDrawer
在左侧显示固定,在右侧显示页面(组件),使用 VueRouter 导航到它们。目前项目运行良好,但我不知道如何加载组件,也不知道<router-view>
.
当前页面是它:
应用程序.vue
<template>
<v-app>
<v-content v-if="isLoggedIn">
<v-navigation-drawer v-if="isLoggedIn" permanent>
<v-toolbar flat>
<v-list>
<v-list-tile>
<v-list-tile-title class="title">Application</v-list-tile-title>
</v-list-tile>
</v-list>
</v-toolbar>
<v-divider></v-divider>
<v-list dense nav>
<v-list-item v-for="item in items" :key="item.title" link>
<v-list-tile>
<v-list-tile-action>
<v-icon>{{item.icon}}</v-icon>
</v-list-tile-action>
<v-list-tile-content>
<v-list-tile-title>{{item.title}}</v-list-tile-title>
</v-list-tile-content>
</v-list-tile>
</v-list-item>
</v-list>
</v-navigation-drawer>
</v-content>
<login v-else />
</v-app>
</template>
<script>
import login from "@/views/Login";
export default {
name: "App",
components: {
login
},
data() {
return {
items: [
{ title: "Dashboard", icon: "dashboard" },
{ title: "Settings", icon: "settings" }
]
};
},
computed: {
isLoggedIn() {
return this.$store.getters.user != null;
}
}
};
</script>
路由器/index.js
import Login from '@/views/Login'
import Dashboard from '@/views/Dashboard'
import Settings from '@/views/Settings'
import VueRouter from 'vue-router'
import Vue from 'vue'
Vue.use(VueRouter)
const routes = [
{
path: '/',
name: 'Login',
component: Login
},
{
path: '/Settings',
name: 'Settings',
component: Settings
},
{
path: '/Dashboard',
name: 'Dashboard',
component: Dashboard
}
]
export default new VueRouter({
mode: 'history',
routes
})
设置.vue
<template>
<h1>Settings</h1>
</template>
<script>
export default {
name: "Settings"
};
</script>
仪表板.vue
<template>
<h1>Dashboard</h1>
</template>
<script>
export default {
name: "Dashboard"
};
</script>
<style>
</style>
解决方案
您可以尝试放入router-view
App.vue
<template>
<v-app>
<v-navigation-drawer v-if="isLoggedIn">
...
</v-navigation-drawer>
<v-content>
<router-view></router-view>
</v-content>
</v-app>
</template>
<script>
export default {
mounted () {
if (this.isLoggedIn) {
// this is better to have guard in router
// https://router.vuejs.org/guide/advanced/navigation-guards.html#global-before-guards
this.$router.push('/login')
}
},
}
</script>
笔记:
- 您不需要将 Login 导入 App.vue。您应该使用 router-view 来渲染它。
- 路由器守卫最好放在另一个地方,比如 router/index.js。你可以在这里找到一个例子
推荐阅读
- python - 在Python中测试抽象类调用父方法
- python-3.x - 使用 numpy 对数据进行排序以获取循环周期范围错误
- axios - 错误 laravel 6 axios:没有“访问控制允许来源”
- android - Play 控制台是否显示测试订阅和测试应用内购买的收入?
- mysql - 为什么我的 tsv 中的“NULL”日期时间条目被转换为 0000-00-00 00:00:00?
- python - 运行 .exe 时,Pyinstaller 给出“'chromedriver.exe' 可执行文件需要在 PATH 中”,但实际的 python 脚本工作正常
- c# - `ClaimsPrincipal.IsInRole` 在声明中期望什么?
- javascript - 您可以通过 nodeJS 使用 javscript 关闭计算机吗?
- javascript - 如何使用 DB 连接运行 Mongo JS Shell 脚本
- python - 运行 Kaggle 时出现路径错误?