vue3 setup中的defineProps和defineEmits(v-model的使用)

defineProps的基本使用:

        父组件

<template>
    <PropsAndEmit label02="小黄" />
</template>

<script setup>
import PropsAndEmit from "../components/PropsAndEmit.vue";
</script>

        子组件

<template>
  <div>{{label01}}</div>
  <div>{{label02}}</div>
</template>

<script setup>


defineProps({
    label01:{
        type:String,
        default:"小红"
    },
    label02:{
        type:String,
        default:"小红"
    }
})
</script>

        type是值的类型,default是默认值,运行的结果为:

defineEmits的基本使用:

        父组件

<template>
    <PropsAndEmit @btn="handleAdd" />
</template>

<script setup>
import PropsAndEmit from "../components/PropsAndEmit.vue";

const handleAdd = () => {
  alert("点击了~")
}
</script>

         子组件

<template>
  <button  @click="handleBth">按钮</button>
</template>

<script setup>
const emit = defineEmits(["btn"])

const handleBth = () => {
    emit("btn")
}
</script>

        得到的结果为:

 defineEmits中的v-model的使用:

        父组件

<template>
    <PropsAndEmit @btn="handleAdd" v-model="num" />
</template>

<script setup>
import { ref } from "@vue/reactivity";
import PropsAndEmit from "../components/PropsAndEmit.vue";

let num = ref()

const handleAdd = () => {
  num.value = num.value  +1
}
</script>

子组件

<template>
  <div>{{count}}</div>
  <button  @click="handleBth">按钮</button>
  
</template>

<script setup>
import { ref } from "@vue/reactivity"


defineProps({
    modelValue:{
        type:Number,
    }
})

const emit = defineEmits(["update:modelValue","btn"])

let count = ref(0)

const handleBth = () => {
    emit("update:modelValue",count)
    emit("btn")
}
</script>

得到结果如下,点击按钮,count+1:

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue 3,自定义组件的v-model默认绑定的是`modelValue`而不是`value`,接收的方法由`input`改为`@update:modelValue`。例如,在一个父组件,我们可以这样使用自定义组件: ``` <template> <child v-model="message" /> </template> ``` 然后在子组件,我们可以这样定义propssetup函数: ``` <script setup lang="ts"> import { defineProps, defineEmits } from 'vue' const props = defineProps({ modelValue: String }) const emits = defineEmits(['update:modelValue']) const onInput = (e) => { emits['update:modelValue'](e.target.value) } </script> <template> <input type="text" :value="modelValue" @input="onInput"> </template> ``` 通过这种方式,我们可以像使用原生的`v-model`一样在父组件使用自定义组件,并且可以正确地双向绑定`modelValue`的值。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [vue3 自定义组件v-model](https://blog.csdn.net/weixin_46694059/article/details/128935137)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [vue3自定义组件使用v-model](https://blog.csdn.net/qq_42075072/article/details/123800801)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值