如何阻止vue组件不调用已挂载

问题描述 投票:0回答:2

这是我的混音

export default {
  created () {
    if (!this.$store.getters.isAuthenticated) {
      this.$router.replace('/start')
    }
  }
}

这是我的组成部分: -

import Auth from '../auth'

export default {
  mixins: [Auth],
  computed: {
    orders () {
      return this.$store.getters.orders
    }
  },
  mounted () {
    this.$store.dispatch('getOrders')
  }
}

商店:-

async getOrders ({ commit, state }) {
  const res = await axios.get(`${API_URL}/orders`, {
    headers: {
      'authorization': state.currentUser.token
    }
  })
  commit('setOrders', res.data)
}

我面临的问题是,虽然当我去'/start'时它确实重定向到'/orders',但它也开始从mounted钩子获取命令,并且因为currentUser为null它给TypeError Cannot read property 'token' of null。虽然我可以通过检查是否设置getOrders来保护我的currentUser函数,但是我必须在许多其他函数中执行它。我想要发生的是,在created挂钩安装后不应该被调用或任何其他人知道更好的技术?

vue.js vuejs2 vue-router vuex
2个回答
0
投票

而不是检查它,用户在mixin中使用global navigation guards进行身份验证。

您可以使用beforeEachbeforeResolve来检查currentUser是否为空。

  import store from './store'; // import your Vuex store

  const router = new VueRouter({
    routes: [{
      name: 'orders',
      path: '/orders',
      meta: {
        requiresAuth: true // use this in the routes that need your currentUser
      }
    }],
  });

  router.beforeResolve((to, from, next) => {
    if (to.matched.some(record => record.meta.requiresAuth)) {
      if (!this.$store.getters.isAuthenticated || !store.state.currentUser) {
        next({
          name: 'forbidden' // the route the guest will be redirected to
        });
      } else {
        next();
      }
    } else {
      next();
    }
  });

  export default router;

0
投票

你可以使用路由功能beforeRouteEnter,如果app没有authed,你可以在进入页面之前重定向到其他页面需要auth

© www.soinside.com 2019 - 2024. All rights reserved.