Mayanming

One day mayanming will be somebody

Vue 父子组件之间的参数传递解析

Vue 父组件=>子组件(动态传值)

遇到问题前提uni-app框架,项目需要父组件接口获取数据后(动态)传值并调用子组件,一直都是空值,甚至打印长度为0,数据却显示长度不为0。

方法一:

props传值,传过来的值需要用watch监听并更新,否则为空值
原因数据还没有被赋值的时候,子组件就已经显示在页面上了

父组件(template)
 <shmily-drag-image :list="dataImgList"></shmily-drag-image>

父组件 (script)
this.dataImgList=res.data.imgList; //参数赋值

这里把接口返回的数组赋值给
this.dataImgList,然后把该数组传给子组件定义的props属性list

子组件(props)
   props: {
    list: {
      type: Array,
      default: function() {
        return []
      }
    }
   }
子组件 (watch:监听数据变化)
watch:{
    list(newVal,oldVal){
     if(newVal){
       this.sonImgList=curVal;
      }
   },
}

此方法数据 this.list 数据进行父组件子组件绑定

方法二:

通过ref属性,父组件调用子组件的方法,把要传的数组作为参数传给子组件,子组件获取该参数,并使用

父组件(template)
<shmily-drag-image ref="fatherImgList"  :list="dataImgList" ></shmily-drag-image>
父组件 (script)
this.$refs.fatherImgList.getSrcList(this.dataImgList); 
子组件(script)
    getSrcList(val){
        this.sonImgList=val;
    },

子组件向父组件传值,如果是动态改变的,也要记得加watch函数,动态改变之后执行的操作写在watch里,比如 this.$emit的函数!

评论