【Vue】TypeError: Cannot read properties of undefined (reading ‘xxx‘)

错误代码块

beforeRouteEnter(to, from, next) {
    console.log(parseInt(sessionStorage.getItem("index")));//可以打印
    console.log(this.active);//访问不到
    if (sessionStorage.getItem("index")) {
      this.active = parseInt(sessionStorage.getItem("index"));//赋值不了,会报错
    }
    next();
  },

用途

用记录用户每次从几页离开的,当用户再回来继续展示那一页
很明显console.log(this.active)访问不到data中的active数据,不能在组件内的导航守卫:进入前就访问data中的数据。

解决办法

<script>
var index = 0;//1、全局初始化一个变量跟data中的active的值一致
export default {
  data() {
    return {
      active: 0,
    };
  },
  created() {
    this.active = index;//在created生命周期里已经可以访问到data中的数据了,此时再赋值即可
  },
  beforeRouteLeave(to, from, next) {
    sessionStorage.setItem("index", this.active);//3、用户离开组件的时候将用户点击的那一页存下来
    next();
  },
  beforeRouteEnter(to, from, next) {
    if (sessionStorage.getItem("index")) {
      index = parseInt(sessionStorage.getItem("index"));//2、由于进入组件的时候还访问不到data中的值,可以先赋值给index
    }
    next();
  },
};
</script>

你可以选择sessionStorage,也可以选择vuex,看个人习惯。我觉得就一个值也没必要搞得过去复杂了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杨不旧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值