vue 初始化/重置数据报错

  • 表单比较复杂,在关闭时,使用这个方法初始化数据:
closeDialog(){
    Object.assign(this.$data, this.$options.data())
    },            
  • 但是data中引入了外部js方法:
         start_time:this.$dayjs().format("YYYY-MM-DD"),
  • 在调用closeDialog是,会报错:

图片描述

  • 请问怎么处理?
阅读 3.2k
3 个回答

调用this.$options.data()后使得当前data中的this发生变化,不再指向当前的Vue实例,该this上没有$dayjs()方法,故报错。
解决方案:
将该方法写在utils.js中引入

import {getTime} from '@/utils/utils.js'
data () {
    return {
        start_time: getTime()
    }
}

this 上不存在 $dayjs 这个方法,没有绑定$dayjs,npm 引进来的话直接用就好

楼上两位讲的都对
@qinchao888 原理讲的很清楚,解决方案也是对的,厉害!
由于我很多页面都要用到这个函数,所以每个用到的页面都引入比较麻烦,还是绑定在全局比较好。

所以在理解你的答案后,我小小改造了一下自己的data,及相关方法

        1. 默认设为‘’,清除时就无影响
        
        data(){
            return{
                start_time: '',
            }
        },
        2. 在watch,mounted,或者小程序的onShow中重新赋值
        
        watch:{
            propsData(newValue, oldValue) {
                this.start_time = this.$dayjs().valueOf()
            }
        },
        3. 调用清除数据的方法:
        resetData() {
                Object.assign(this.$data, this.$options.data())
            },

项目中有太多表单,在每次提交完成后都用清空,手动重新赋值既麻烦有容易出错,这个清除数据的方法非常实用;
在pc端时,引入了element-ui的表单验证,调用这个方法会导致进入表单时就自动验证了,暂未解决。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题