Vue组件中能否在data内定义days变量?date_current未定义问题
能否在Vue组件的data中定义days并通过方法初始化?
可以,但不能直接用你当前的写法。报错原因是:在data的return对象构建阶段,组件实例还未完成初始化,date_current还未挂载到this上,此时调用this.days_get(),方法里访问this.date_current会出现undefined错误。
以下是几种可行的解决方案:
方案1:在data内直接计算(不依赖methods)
先创建date_current变量,再基于它直接计算days,无需访问this:
data(){ const date_current = new Date() // 内联逻辑计算当月日期数组 const days = (() => { const date_iteration = new Date(date_current.getFullYear(), date_current.getMonth()) let daysArr = [] while(date_iteration.getMonth() === date_current.getMonth()){ daysArr.push(new Date(date_iteration.getFullYear(), date_iteration.getMonth(), date_iteration.getDate())) date_iteration.setDate(date_iteration.getDate() + 1) } return daysArr })() return { date_current, days } }
方案2:使用计算属性(推荐)
将days改为计算属性,计算属性会在组件实例初始化完成后执行,能正常访问this.date_current,且当date_current变化时,days会自动更新:
data(){ return { date_current: new Date() } }, computed: { days(){ const date_iteration = new Date(this.date_current.getFullYear(), this.date_current.getMonth()) let daysArr = [] while(date_iteration.getMonth() === this.date_current.getMonth()){ daysArr.push(new Date(date_iteration.getFullYear(), date_iteration.getMonth(), date_iteration.getDate())) date_iteration.setDate(date_iteration.getDate() + 1) } return daysArr } }
方案3:在生命周期钩子中赋值
保持data里的days初始为空数组,在created或beforeMount钩子中调用方法赋值,此时组件实例已初始化,this能正常访问data属性:
data(){ return { date_current: new Date(), days: [] } }, created(){ this.days = this.days_get() }, methods: { days_get(){ const date_iteration = new Date(this.date_current.getFullYear(), this.date_current.getMonth()) let days = [] while(date_iteration.getMonth() === this.date_current.getMonth()){ days.push(new Date(date_iteration.getFullYear(), date_iteration.getMonth(), date_iteration.getDate())) date_iteration.setDate(date_iteration.getDate() + 1) } return days } }
内容的提问来源于stack exchange,提问作者Prosto_Oleg
相关产品推荐
相关产品推荐

