时间:2023-02-01 10:28:27 | 栏目:vue | 点击:次
父组件传值,在子组件中不能用mounted处理
export default{ props:['floor1'], data(){ return { floor1_0:'', floor1_1:'', floor1_2:'', } }, mounted(){ console.log(this.floor1) //打印出的不是所传的值 this.floor1_0 = this.floor1[0]; } }
因为props为异步传值(就是在父组件没有加载完数据时,floor1就传递到了子组件,此时floor1还没被附上值,先执行了子组件的mounted),而mounted执行一次后无法改变floor1的值。
使用侦听器watch,当floor1改变时,重新计算
watch:{ floor1:function(val){ this.floor1_0 = val[0]; this.floor1_1 = val[1]; } }
1.1mounted中使用$nextTick会导致页面挂掉
mounted() { // 页面卡死 this.$nextTick(() => { this.setUrl() }) }
2.1props传过去的值,第一时间在mounted是获取不到的。因为是异步传值的。
解决方法:
(1)使用watch
(2)将需要进行的处理在父组件进行操作,然后将操作完的值直接传给子组件。
watch: { datas: function (val) { } } 或 (父) <examAchSearchHeader :exprotUrl="exprotUrl"></examAchSearchHeader> ... this.exportUrl = XXXX (子) props: { exportUrl: String }
2.2通过props传给子组件的值变化后子组件接收到 和 通过refs访问子组件方法中使用接收到的参数变化的顺序问题
通过refs访问时,接收到的参数是变化前的参数。还是因为异步的问题。可以强制赋值改变,或用watch等。
// parent <examAchTable ref="achTable" :dataList="examAchList"></examAchTable> // 若这里不强制赋值一下,在examAchList变化后直接调用子组件的transData方法时,子组件dataList仍是变化前的值 this.$refs.achTable.dataList = this.examAchList this.$refs.achTable.transData(res.data.totalRecord) // child transData(total) { if (this.dataList) // ... }