vue 只有登录后进入首页只触发一次,后面不再触发如何实现
时间: 2024-03-09 07:46:08 浏览: 30
可以通过 Vue Router 的导航守卫来实现只在登录后进入首页触发一次的功能。具体实现步骤如下:
1. 在路由配置文件中,给首页路由添加一个 `meta` 字段,用来标记该路由需要登录后才能访问。
```javascript
const routes = [
{
path: '/',
name: 'Home',
component: Home,
meta: {
requiresAuth: true // 需要登录后才能访问
}
},
// 其他路由...
]
```
2. 在 Vue 实例中,使用 `beforeEach` 导航守卫来判断用户是否已经登录,并且判断当前路由是否需要登录才能访问。如果用户已经登录,并且当前路由需要登录才能访问,就执行相关逻辑(例如调用接口加载数据),否则直接跳转到目标路由。
```javascript
router.beforeEach((to, from, next) => {
const isAuthenticated = localStorage.getItem('isAuthenticated') // 判断用户是否已经登录
if (to.meta.requiresAuth && !isAuthenticated) { // 如果当前路由需要登录才能访问,并且用户还没有登录
next('/login') // 跳转到登录页面
} else { // 否则直接跳转到目标路由
next()
}
})
```
3. 在首页组件的 `created` 生命周期函数中,添加一个标志位 `hasLoaded`,用来记录是否已经加载过数据。如果当前标志位为 `false`,就执行加载数据的逻辑,并将标志位设置为 `true`。如果当前标志位为 `true`,不执行任何操作。
```javascript
export default {
name: 'Home',
data() {
return {
hasLoaded: false // 标记是否已经加载过数据
}
},
created() {
if (!this.hasLoaded) { // 如果还没有加载过数据
// TODO: 加载数据的逻辑
this.hasLoaded = true // 将标志位设置为 true
}
}
}
```
通过以上步骤,就可以实现只在登录后进入首页触发一次的功能。