vue父子组件传值(form表单)

使用场景:

子组件 form 表单中输入的值,子组件不用提交,在父组件中直接可以显示
解决方案:通过触发input的原生input事件

主要代码:

    父:`@input="($event) => {form.materials[i] = $event}`
	子:`this.$emit('input', val) 
父组件 监听子组件的input事件 @input="($event) => {form.materials[i] = $event}
  <ipc-list
       v-for="(material, i) in form.materials"
         :value="material"
         :dataSource="form.dataSource"
         :index="i"
         :materialsLength="form.materials.length"
         :key="material.id"
         @input="($event) => {form.materials[i] = $event}
       >
   </ipc-list>
子组件 ipc-list中的主要部分代码
  props: {
    value: {
      type: Object
    }
  }
  data () {
    return {
     material: null
   }
 }
 // watch 进行深度监听  value:父组件传给子组件的值
 watch: {
    value: {
      handler (val) {
        this.material = JSON.parse(JSON.stringify(val))
      },
      deep: true,
      immediate: true
    },
    material: {
      handler (val, old) {
      // 子组件触发input事件,父组件动态监听子组件数据 	this.$emit('input', val)  
       	this.$emit('input', val)  
      },
      deep: true
    }
  },

html 直接绑定data中定义的数据 material
  <el-form :model="material" :rules="rules" ref="formName" label-width="90px">
  .....
  </el-form>
PS:监听键盘事件-改变输入框的值类型
<el-input
 	v-model="material.port"
   :maxlength="5"
   @keyup.native="channelReplaceIllegal"
   :placeholder="$t('common.placeholderInput') + $t('program.ipcList.port')"
 ></el-input>

// 改变输入框的值类型 string -> number
 channelReplaceIllegal (e) {
  e.target.value = e.target.value.replace(/[^\d]/g, '')
 },
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue是一种流行的JavaScript框架,用于构建用户界面。在Vue中,父子组件之间传递数据是一种常见的需求。以下是一种常用的方法来实现父子组件之间的数据传递: 1. Props(属性):组件可以通过props属性向组件传递数据。在组件中,通过在组件标签上绑定属性的方式传递数据。在组件中,可以通过props选项接收并使用这些数据。 组件: ```html <template> <div> <child-component :message="parentMessage"></child-component> </div> </template> <script> import ChildComponent from './ChildComponent.vue'; export default { components: { ChildComponent }, data() { return { parentMessage: 'Hello from parent component' }; } } </script> ``` 组件: ```html <template> <div> <p>{{ message }}</p> </div> </template> <script> export default { props: ['message'] } </script> ``` 2. $emit(自定义事件):组件可以通过$emit方法触发自定义事件,并将需要传递的数据作为参数传递给组件。在组件中,通过在组件标签上监听自定义事件的方式接收数据。 组件: ```html <template> <div> <child-component @child-event="handleChildEvent"></child-component> </div> </template> <script> import ChildComponent from './ChildComponent.vue'; export default { components: { ChildComponent }, methods: { handleChildEvent(data) { console.log(data); // 在这里处理组件传递的数据 } } } </script> ``` 组件: ```html <template> <div> <button @click="emitEvent">触发事件</button> </div> </template> <script> export default { methods: { emitEvent() { this.$emit('child-event', 'Hello from child component'); // 触发自定义事件,并传递数据给组件 } } } </script> ``` 以上是Vue中实现父子组件之间传递数据的两种常用方法。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值