首页

源码搜藏网

首页 > 开发教程 > js/jQuery教程 >

使用props传值时无法在mounted处理的解决方案

创建时间:2022-04-23 12:31  

props传值无法在mounted处理的解决

遇到的问题

父组件传值,在子组件中不能用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];
 }
}

vue笔记(props和mounted)

1.mounted

1.1mounted中使用$nextTick会导致页面挂掉

mounted() {
// 页面卡死
  this.$nextTick(() => {
   this.setUrl()
  })
 }

2.props

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)
  // ...
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持源码搜藏网。

上一篇:vue子组件中mounted取不到props中的值情况
下一篇:没有了

相关内容

热门推荐