vue 权限 router demo
时间: 2023-07-01 17:13:33 浏览: 86
好的,这里是一个简单的 Vue Router 权限控制的 demo:
```html
<!-- index.html -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Vue Router Demo</title>
</head>
<body>
<div id="app">
<h1>Vue Router Demo</h1>
<nav>
<ul>
<li><router-link to="/">Home</router-link></li>
<li><router-link to="/about">About</router-link></li>
<li v-if="isAdmin"><router-link to="/admin">Admin</router-link></li>
<li><button @click="logout">Logout</button></li>
</ul>
</nav>
<router-view></router-view>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue"></script>
<script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
<script src="./app.js"></script>
</body>
</html>
```
```js
// app.js
const Home = { template: '<div>Home</div>' }
const About = { template: '<div>About</div>' }
const Admin = { template: '<div>Admin</div>' }
const router = new VueRouter({
mode: 'history',
routes: [
{ path: '/', component: Home },
{ path: '/about', component: About },
{
path: '/admin',
component: Admin,
meta: { requiresAuth: true }
}
]
})
const app = new Vue({
router,
data: {
isAdmin: false
},
methods: {
login() {
// 登录逻辑
this.isAdmin = true
},
logout() {
// 登出逻辑
this.isAdmin = false
}
}
}).$mount('#app')
router.beforeEach((to, from, next) => {
if (to.meta.requiresAuth && !app.isAdmin) {
next('/')
} else {
next()
}
})
```
这个 demo 中有三个页面:Home、About 和 Admin。其中 Admin 页面需要管理员权限才能访问,如果用户没有登录或者不是管理员,就会被重定向到 Home 页面。注意这里使用了 Vue Router 的 `meta` 字段来记录需要登录的页面,并且使用了全局的 `beforeEach` 守卫来进行权限控制。
阅读全文