this.$data和this.$options.data()

今天在公司发现一段vue代码的写法

$route() {
    Object.assign(this.$data, this.$options.data());
    const mounted = this.$options.mounted || [];
    mounted.forEach(fn => fn.call(this));
},

个人的理解

  • vm.$options.methods可以获取自定义的属性,created,mounted等也一样

  • this.$data是已经转成了getter和setter,所以拿到的是一个修改后的数据

  • this.$options.data()是刚刚传入vue里边,成员没有转成了getter和setter,所以拿到的仅仅是注入vue实例的初始数据

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rJfRZd0G-1646130702422)(F:/markdownImag/JS/image-20220301165413373.png)]

先分析这一段代码

Object.assign(this.$data, this.$options.data());
  • 把未修改的覆盖到,已经修改了的,Object.assign浅拷贝

  • 在监听属性里边,监听$route就可以每次刷新 重新 初始化2

  • 然后element-ui表单重置好像也和这个差不多

然后是这段代码

    const mounted = this.$options.mounted || [];
  • this.$options.mounted这里拿到的是一个数组,里边存的是mounted这个钩子函数

最后一段代码

 mounted.forEach(fn => fn.call(this));
  • 执行一次mounted钩子,并传入当前的this

个人理解:

总的代码意思就是说:当监听到路由变化的时候,让数据重置,然后再执行mouted钩子函数,把数据再出现渲染

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值