vue父组件给v-for循环的子组件传值

普通的父子组件传值:

父页面中子组件写法:

                <Form
                  :addFrom="addFrom"
                  @changeChild="changeChild"
                ></Form>

子组件中通过Prop去接收参数

  @Prop()
  addFrom;

子组件中如果需要给父组件传值则在子组件中通过方法this.$emit('方法名',数据)给父组件传递数据

  changeChildData(data) {
      if (!!this.item.columnNameRelated) {
      let info = {
        'columnName': this.item.columnName,
        'columnNameRelated': this.item.columnNameRelated,
        'parentId': data
      }
      this.$emit('changeChild', data);
    }
  }

for循环的父子组件传值: 

当子组件是通过v-for循环出来的,并且只给特定的某个组件传值时通过this.$refs调用子组件的方法传递数据

<div class="form-col" v-if="getIsShow(item)" :key="'c' + i">
              <el-form-item
                :label="item.columnName"
                :prop="item.columnName"
                :title="item.columnName"
              >
                <Form
                  :ref="'A' + item.columnName"
                  :addFrom="addFrom"
                  :item="item"
                  @changeChild="changeChild"
                ></Form>
              </<el-form-item>
</div>

父组件中写法为:

  private changeChild(data) {
    //当该字段存在关联字段时 给关联字段传值
    if (!!data.columnNameRelated) {
      let info = 'A' + data.columnNameRelated;
      this.$refs[info][0].initParentId(data.parentId);
    }
  }

子组件中接收数据:

  //获取传递的父节点数据
  initParentId(data) {
    console.log(data)
    this.parentId = data
  }

一般传值this.$res[xxx]都不用带下标,但是如果是for循环出来的一定要指定下标this.$refs[xxx][0]。

因为我这里是ref唯一的所以每个传值的下标都是0,如果定义的子组件ref不唯一都是类似ref="ABC"这种,给指定的子组件传数据就要通过他们的索引值传值this.$refs[xxx][0]、this.$refs[xxx][1]、this.$refs[xxx][2]...

                <Form
                  ref="ABC"
                  :addFrom="addFrom"
                  :item="item"
                  @changeChild="changeChild"
                ></Form>

如果不加下标的话会报错:

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值