浅谈vue中computed属性对data属性赋值为undefined的原因

 更新时间:2022年02月22日 10:21:20   作者:Oralinge  
本文主要介绍了浅谈vue中computed属性对data属性赋值为undefined的原因,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

场景:

我在computed中return了一个值,然后在data中直接将它复制给另一个属性。结果data中的属性值为undefined…

代码示例

在这里插入图片描述

timer为undefined…

原因:

在这里很容易想到是执行顺序的问题,computed中的属性和data中的属性最终都会加载到app这个实例下。如果data中的实例属性被创建完成的时候,computed中的实例属性还没被创建,很明显,在data中获取到computed中的属性必定是undefined…

下面看一下new vue的时候,它的执行顺序

_init中初始化

function Vue (options) {
if (process.env.NODE_ENV !== 'production' &&
  !(this instanceof Vue)
) {
  warn('Vue is a constructor and should be called with the `new` keyword')
}
this._init(options) //初始化各个功能
}

_init中做了什么?

  initLifecycle(vm)
  initEvents(vm)
  initRender(vm)
  callHook(vm, 'beforeCreate')
  initInjections(vm) // resolve injections before data/props
  initState(vm) //初始化,initState()是在beforeCreate和created之间
  initProvide(vm) // resolve provide after data/props
  callHook(vm, 'created')

在initState()做了这些事情

if (opts.props) initProps(vm, opts.props)//初始化Props
if (opts.methods) initMethods(vm, opts.methods)//初始化methods
if (opts.data) {
  initData(vm)} else {
  observe(vm._data = {}, true /* asRootData */)}//初始化data
if (opts.computed) initComputed(vm, opts.computed)//初始化computed

从执行顺序中我们不难得出结论,初始化data在初始化computed之前。

另外,Props,methods,data和computed的初始化都是在beforeCreated和created之间完成的

解决办法

直接在computed中对data中的属性赋值,因为此时data已经初始化。

到此这篇关于浅谈vue中computed属性对data属性赋值为undefined的原因的文章就介绍到这了,更多相关vue data属性赋值为undefined内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 理解Vue2.x和Vue3.x自定义指令用法及钩子函数原理

    理解Vue2.x和Vue3.x自定义指令用法及钩子函数原理

    这篇文章主要介绍了理解Vue2.x和Vue3.x的自定义指令的用法及钩子函数原理,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2021-09-09
  • vue之keepAlive使用案例详解

    vue之keepAlive使用案例详解

    这篇文章主要介绍了vue之keepAlive使用案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-09-09
  • vue实现多个元素或多个组件之间动画效果

    vue实现多个元素或多个组件之间动画效果

    这篇文章主要为大家详细介绍了vue实现多个元素或多个组件之间动画效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-09-09
  • Vue3解析markdown并实现代码高亮显示的详细步骤

    Vue3解析markdown并实现代码高亮显示的详细步骤

    Vue的markdown解析库有很多,如markdown-it、vue-markdown-loader、marked、vue-markdown等,这篇文章主要介绍了Vue3解析markdown并实现代码高亮显示,需要的朋友可以参考下
    2022-07-07
  • 详解Vue调用手机相机和相册以及上传

    详解Vue调用手机相机和相册以及上传

    这篇文章主要介绍了Vue调用手机相机及上传,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-05-05
  • Vue实现购物小球抛物线的方法实例

    Vue实现购物小球抛物线的方法实例

    这篇文章主要给大家介绍了Vue实现购物小球抛物线的方法实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • 解决vue项目F5刷新mounted里的函数不执行问题

    解决vue项目F5刷新mounted里的函数不执行问题

    今天小编就为大家分享一篇解决vue项目F5刷新mounted里的函数不执行问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • vue3+ts+element-plus实际开发之统一调用弹窗封装的详细过程

    vue3+ts+element-plus实际开发之统一调用弹窗封装的详细过程

    这篇文章主要介绍了vue3+ts+element-plus实际开发之统一调用弹窗封装的详细过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2024-03-03
  • vue.js基于ElementUI封装了CRUD的弹框组件

    vue.js基于ElementUI封装了CRUD的弹框组件

    这篇文章主要介绍了vue.js基于ElementUI封装了CRUD的弹框组件,问咋会给你围绕主题展开详细的内容介绍,感兴趣的小伙伴可以参考一下
    2022-07-07
  • vue3中proxy的基本用法说明

    vue3中proxy的基本用法说明

    这篇文章主要介绍了vue3中proxy的基本用法说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05

最新评论