gpt4 book ai didi

javascript - Vue-router 2 更改路由但不更新 View ?

转载 作者:可可西里 更新时间:2023-11-01 02:10:52 25 4
gpt4 key购买 nike

我在使用以下网站时遇到登录问题:

  • Vue.js v2.0.3
  • vue-router v2.0.1
  • vuex v0.8.2

routes.js 我有一个简单的拦截器设置

router.beforeEach((to, from, next) => {
if (to.matched.some(record => record.meta.requiresAuth)) {
// this route requires auth, check if logged in
// if not, redirect to login page.
if (!router.app.auth.isUserLoggedIn) {
next({
path: '/login',
query: { redirect: to.fullPath }
})
} else {
next()
}
} else {
next() // make sure to always call next()!
}

})

login.vue 中,它在使用 Google API 仅用于登录成功后处理登录页面逻辑,我称之为:

this.login(userData).then( 
() => this.$router.push(this.redirectToAfterLogin), // Login success
() => {} // Login failed
)


mounted: function(){
if (this.auth.isUserLoggedIn){
// Let's just redirect to the main page
this.$router.push(this.redirectToAfterLogins)
}else{
Vue.nextTick(() => {
this.loadGooglePlatform()
})}}


computed: {
redirectToAfterLogin: function() {
if (this.$route.query.redirect){
return this.$route.query.redirect
}else{
return '/'
}
}
}

路由器.js

var VueRouter = require('vue-router')

// Router setup
export const router = new VueRouter({
linkActiveClass: "is-active",
mode: 'history',
saveScrollPosition: true,
routes: [
{ path: '', name: 'root', redirect: '/home' },
{ path: '/login', name: 'login', meta: { loadingNotRequired: true }, component: require('./pages/login.vue') },
{ path: '/logout', name: 'logout', meta: { loadingNotRequired: true }, component: require('./pages/logout.vue') },
{ path: '/home', name: 'home', title: 'Home', redirect: '/home/random', component: require('./pages/home.vue'),
children: [
{ path: 'random', name: 'random', meta: { requiresAuth: true }, title: 'Random', component: require('./pages/random.vue') }
]
}
]
})

// Redirect to login page if not logged In
router.beforeEach((to, from, next) => {
if (to.matched.some(record => record.meta.requiresAuth)) {
// this route requires auth, check if logged in
// if not, redirect to login page.
if (!router.app.auth.isUserLoggedIn) {
next({
path: '/login',
query: { redirect: to.fullPath }
})
} else {
next()
}
} else {
next() // make sure to always call next()!
}
})

现在 this.login 只是对 vuex 的调用,用于更新登录用户。

发生的情况是登录后,URL 更改 为/home,但DOM 没有更新!

成功更改 DOM 的唯一方法是强制 location.reload(),这不是我想要做的,因为它会丢失我在 Head 中动态加载的 G 脚本。

知道如何强制 View 更新 DOM 吗?

注意:它只在用户第一次登录时发生,如果他注销并重新登录,重定向就可以了

最佳答案

可能不是一个完美的解决方案,因为它会重新创建组件,但它适用于具有相同路由且需要更新组件的所有情况。

只需更新 <router-view/><router-view></router-view>

<router-view :key="$route.fullPath"></router-view>

关于javascript - Vue-router 2 更改路由但不更新 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40348177/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com