在前端Vue开发中,经常遇到过这种需求,点击某条数据来查看详情,详情页又被单独封装成一个组件,在父组件中引入该子组件,当点击按钮触发事件时,传入数据参数,初始化子组件,设置子组件可见。这里提供两种初始化子组件的方式

1.设置子组件的ref属性,通过$refs.refAttribute.init来初始化子组件

首先在子组件中设置一个init方法,用来设置绑定的是否可见参数为true以及初始化子组件的form表单内容

 methods: {
      init (vehicleNumber) {
        const vehicle = vehicleNumber && vehicleNumber.length > 0 ? vehicleNumber[0] : ''
        const letter = vehicleNumber && vehicleNumber.length > 1 ? vehicleNumber[1] : ''
        const num = vehicleNumber && vehicleNumber ? vehicleNumber.substring(2) : ''
        this.$nextTick(() => {
          this.form.setFieldsValue({ //表单内容由传来的参数赋值
            selectedAbbreviations: vehicle,
            Letters: letter,
            text: num
          })
        })
        this.visible = true // 组件是否可见
      },

在父组件中引入子组件并设置ref属性

<selectVehicleDriverNumber ref="selectVehicleDriverNumber" @getVehicle_driverNumber="getVehicleDriverNumber"></selectVehicleDriverNumber>
<!--@getVehicle_driverNumber是监听子组件修改内容后传出的参数,由父组件接收并调用方法-->

当点击某条记录(数据)后,初始化子组件

 <a-icon slot="suffix" type="edit" style="color: rgba(0,0,0,.45)" @click="openModal"/>
 openModal () {
         this.$refs.selectVehicleDriverNumber.init(this.form.getFieldValue('license_plate_number'))
     },

2.使用父子组件间的通信,通过监听某个值的状态来决定是否初始化子组件

在父组件中引入子组件并传递一个对象,该对象包含了一个Boolean值(默认为false)和另一个对象,Boolean值用来决定是否初始化组件,对象为传递的参数

<listEdit ref="listEdit" :show="componentsShow" ></listEdit>

当点击某条记录(数据)后,更改对象中的Boolean值同时将参数放入componentsShow对象中

<a @click="editClick(record)">编辑</a>
editClick (record) {
       this.componentsShow = {
         show: true,
         record: record,
         typeName: 'edit'
       }
     }

子组件接受传来的componentsShow对象参数

props: {
      // eslint-disable-next-line vue/require-default-prop
      show: {
        type: Object
      }
    }

在子组件中监听父组件传来的对象中的Boolean值,如果为true则调用子组件的init()函数初始化子组件(设置表单的值)

watch: {
      show (NewValue, OldValue) {
        console.log('new----', NewValue)
        console.log('old----', OldValue)
        if (NewValue.show) {
          this.init(NewValue.record, NewValue.typeName)
        }
      }
    }
Logo

前往低代码交流专区

更多推荐