关于 vue 如何在beforeRouteEnter中获取 this 和操作 data 中的数据

在 vue 项目中,经常需要通过判断从不同的页面进入,显示不同的内容,beforeRouteEnter非常好判断从哪个路由进去,但在这里面因为获取不到this,操作不了 data 中的数据,即使我们知道是从哪个路由进入,也没法对他进行差异化的操作。

在官方文档中,beforeRouteEnter 在渲染该组件的对应路由被 confirm 前调用
不能获取组件实例 this
因为当前守卫执行前,组件实例还没被创建。

beforeRouteEnter(to, from, next) {
    // 在渲染该组件的对应路由被 confirm 前调用
    // 不!能!获取组件实例 `this`
    // 因为当守卫执行前,组件实例还没被创建
  },

官方也提供了方法,就是可以通过传一个回调给 next来访问组件实例。在导航被确认的时候执行回调,并且把组件实例作为回调方法的参数。

beforeRouteEnter (to, from, next) {
  next(vm => {
    // 通过 `vm` 访问组件实例
  })
}

在执行时,执行顺序是 beforeRouteEntercreatedmountedbeforeRouteEnternext。通过给next传一个回调,就可以获取像this一样操作data中的数据,也可以执行函数等。

data() {
	return {
		dataData: "dataData",
	};
},
computed: {},
watch: {},
beforeRouteEnter(to, from, next) {
	console.log("beforeRouteEnter");
	console.log("thisInBeforeRouteEnter", this);
	next((vm) => {
		console.log("thisInBeforeRouteEnterNext", this);
		console.log("vm", vm);
		console.log("dataDataInBeforeRouteEnter", vm.dataData);
		vm.functionA("fromNext");
	});
},
created() {
	console.log("created");
	console.log("thisInCreated", this);
},
mounted() {
	console.log("mounted");
	console.log("thisInMounted", this);
},
destroyed() {},
methods: {
	functionA(param) {
		console.log("fnA", param);
	},},

这是打印结果

可以看出:

  1. beforeRouteEnter 中的 thisunderfinded
  2. beforeRouteEnter 中的 vmcreatedmounted 中打印的this是一样的
  3. beforeRouteEnter 中的 next 是在 createdmounted执行之后才执行的
  4. beforeRouteEnter 中的 vm(可使用其他参数) 可以操作 data 中的数据,也可以操作methods中的函数,且使用方法和 this 一致

如有错误,欢迎指正,谢谢!
以上内容仅供参考,欢迎大家讨论。

  • 12
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值