Vue3:emit(‘update:modelValue‘)

本文展示了如何在Vue中实现子组件与父组件的数据双向绑定。通过v-model和自定义事件,子组件能够更新父组件的状态,并响应父组件的变更。示例代码详细解释了模板、脚本部分,包括props的使用、watch监听以及emit事件的触发,帮助开发者理解Vue组件间的通信机制。
摘要由CSDN通过智能技术生成
//子组件
<template>
  <div>
    <input v-model="sea" @input="valChange(sea)" />
    <input v-model="add" @input="valChange2(add)" />
    <!-- @input输入框发生变化后触发(将v-model传给父组件) -->
  </div>
</template>
<script lang="ts">
import { defineComponent, ref, watch } from 'vue'
 
export default defineComponent({
  name: 'ChildComp',
  props: {
    modelValue: { // 父组件 v-model 没有指定参数名,则默认是 modelValue
      type: String,
      default: ''
    },
    address: {
      type: String,
      default: ''
    }
  },
  setup (props, { emit }) {
    // input初始化
    const sea = ref(props.modelValue)
    const add = ref(props.address)
 
    // 因为props.modelValue、props.address是非引用类型,改变时,需要监听,对响应式数据重新赋值
    watch(() => props.modelValue, () => { sea.value = props.modelValue })
    watch(() => props.address, () => { add.value = props.address })
 
    // 数据双向绑定
    function valChange (e: string) {
      emit('update:modelValue', e)
    }
 
    // 数据双向绑定
    function valChange2 (e: string) {
      emit('update:address', e)
    }
 
    return {
      sea,
      add,
      valChange,
      valChange2
    }
  }
})
</script>
//父组件
<template>
  <div>
    <ChildComp v-model="search" v-model:address="addr" />
    <!-- search接收的就是emit("update:modelValue")的参数 -->
    <h1>{{ search }}</h1>
    <h1>{{ addr }}</h1>
  </div>
</template>
<script>
import { defineComponent, ref } from 'vue'
import ChildComp from '../components/ChildComp'
 
export default defineComponent({
  name: 'Index',
  components: {
    ChildComp
  },
  setup () {
    const search = ref('')
    const addr = ref('')
    return {
      search,
      addr
    }
  }
})
</script>
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ahwangzc

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值