需求:最近遇到了一个需求,把一个页面内部的tab选项卡改为路由控制的页面
问题:查询条件单独封装一个组件后给父组件页面通过$emit事件传递表单参数;但是在父组件中每次得到的表单值都是undefined;调试了半天,百度了各种方法,都取不到值;代码如下:
data(){return{formData: {orgid: '',buildid: '',box_name: '',line_name: '',line_type: '',timing_type: '',timing_name: '',status: '',name: '',value: []},}
}父组件:
<seachForm @comSearch="comSearch"></seachForm>
comSearch(data){console.log(data)//undefined
}子组件:
onSearch() {this.$emit('comSearch',this.formData)
},
接着发现子组件换一种写法可以取到值
子组件:换一下两种方式可以取到值
onSearch() {this.$emit('comSearch',{a:this.formData})或者this.$emit('comSearch',[this.formData])
},
最后想到是不是this的原因(还有一个原因是父组件里也在mounted中调用列表接口;此时父组件Dom加载完毕,数据也变为最新的,但是子组件还没有把this.formData传过来,所以在父组件mounted中输出控制台是undefined;也就是当加载完毕后再次点击查询按钮时this.formData又有数据的原因)
onSearch() {let _this = thisconsole.log('修改后this:',_this == this);this.$emit('comSearch',_this.formData)
},
问题虽然解决了,打印出的判断居然是true,希望路过的大神帮忙解释原因,最后讲一下怎么监听this的变化