记录下:Vue3的emit(‘update:modelValue‘)

1、回忆下v-model原生input元素上的用法:

<input v-model="text" />
等价于
<input 
    :value="text" 
    @input="text = $event.target.value"    
/>

2、使用v-model在组件上实现双向绑定(通过计算属性实现)

父组件

<template>
  <div>
    <input type="text" v-model="data">
    <Son v-model="data"></Son>
  </div>
</template>


<script lang="ts" setup>
import Son from './Son.vue';
import { ref } from 'vue'
const data = ref('joke')  

子组件

<template>
  <div>
    <input type="text" v-model="inputRef.val">
  </div>
</template>

<script lang="ts" setup>
import { reactive, computed } from 'vue'
//父组件给子组件传值时,没用使用名字而是使用v-model,则子组件接收时默认名字为modelValue
const props = defineProps(['modelValue'])  
const emit = defineEmits(['update:modelValue'])
const inputRef = reactive({
  val: computed({
    get:() => props.modelValue || '',
    set: val => {
      emit("update:modelValue", val)
    }
  })
})
</script>

3、使用input事件的方式:

引用文章: https://blog.csdn.net/l2345432l/article/details/126017725

官方文档:https://cn.vuejs.org/guide/components/v-model.html#v-model-arguments

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue 3 中,`emit` 和 `v-model` 都有了一些变化。 对于 `emit`,现在可以使用 `emit` 方法来直接触发一个事件,而不需要在组件实例上手动定义该事件。例如: ```javascript // 子组件 const ChildComponent = { setup(props, { emit }) { const handleClick = () => { emit('my-event', 'some data') } return { handleClick } } } // 父组件中使用 <template> <child-component @my-event="handleMyEvent" /> </template> <script> import ChildComponent from './ChildComponent' export default { components: { ChildComponent }, methods: { handleMyEvent(data) { console.log(data) } } } </script> ``` 对于 `v-model`,Vue 3 提供了一个新的指令 `v-model` 的语法糖 `v-model:value` 和 `v-model:emit`,分别用于绑定值和触发事件。例如: ```javascript // 子组件 const ChildComponent = { props: { modelValue: { type: String, default: '' } }, emits: ['update:modelValue'], setup(props, { emit }) { const handleChange = (event) => { emit('update:modelValue', event.target.value) } return { handleChange } }, template: ` <input :value="modelValue" @input="handleChange" /> ` } // 父组件中使用 <template> <child-component v-model:value="text" /> </template> <script> import ChildComponent from './ChildComponent' export default { components: { ChildComponent }, data() { return { text: '' } } } </script> ``` 在子组件中,我们需要定义 `props` 和 `emits`,其中 `props` 中的 `modelValue` 表示绑定的值,`emits` 中的 `update:modelValue` 表示触发更新值的事件。然后在 `setup` 中通过 `emit` 触发该事件。在父组件中,我们可以使用 `v-model:value` 来绑定值,并且这个值会自动传递给子组件;同时我们也可以使用 `v-model:emit` 来指定触发更新值的事件,默认为 `update:modelValue`。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值