当前位置: 代码网 > it编程>前端脚本>Vue.js > Vue3 defineModel的使用示例详解

Vue3 defineModel的使用示例详解

2025年02月13日 Vue.js 我要评论
基础配置使用在vue中,父组件可以在子组件上传值,子组件通过props接收,但是子组件不可修改props,否则控制台会报出警告,这也符合vue的单向数据流原则,所以如果想要向子组件传值,并且允许子组件

基础配置使用

在vue中,父组件可以在子组件上传值,子组件通过props接收,但是子组件不可修改props,否则控制台会报出警告,这也符合vue的单向数据流原则,所以如果想要向子组件传值,并且允许子组件修改的话,一般会这么写:

<!-- child.vue -->
<script setup>
const props = defineprops(['modelvalue'])
const emit = defineemits(['update:modelvalue'])
</script>
<template>
  <input
    :value="props.modelvalue"
    @input="emit('update:modelvalue', $event.target.value)"
  />
</template>

在父组件调用

<!-- parent.vue -->
<child
  :modelvalue="foo"
  @update:modelvalue="$event => (foo = $event)"
/>

而在vue3中,声明了一种新的传值方式definemodel,可以更方便的向子组件传值,并且允许子组件修改传值,以实现双向绑定.

<!-- child.vue -->
<script setup>
const model = definemodel()
function update() {
  model.value++
}
</script>
<template>
  <div>parent bound v-model is: {{ model }}</div>
  <button @click="update">increment</button>
</template>

父组件

<!-- parent.vue -->
<child v-model="countmodel" />

definemodel() 返回的值是一个 ref。它可以像其他 ref一样被访问以及修改,不过它能起到在父组件和当前变量之间的双向绑定的作用:

  • 它的 .value 和父组件的 v-model 的值同步;
  • 当它被子组件变更了,会触发父组件绑定的值一起更新。

definemodel允许配置,可以通过给 definemodel 传递选项,来声明底层 prop 的选项:

// 使 v-model 必填
const model = definemodel({ required: true })
// 提供一个默认值
const model = definemodel({ default: 0 })

需要注意的是:如果为 definemodel prop 设置了一个 default 值且父组件没有为该 prop 提供任何值,会导致父组件与子组件之间不同步。

<!-- child.vue -->
const model = definemodel({ default: 1 })
<!-- parent.vue -->
const myref = ref()
<child v-model="myref"></child>

上述代码中,父组件的 myref 是 undefined,而子组件的 model 是 1,所以如果设置初始值,应保持二者一致

配置参数,绑定多个v-model

组件上的 v-model 也可以接受一个参数:

<mycomponent v-model:title="booktitle" />
<!-- mycomponent.vue -->
<script setup>
const title = definemodel('title')
</script>
<template>
  <input type="text" v-model="title" />
</template>

如果需要额外的 prop 选项,应该在 model 名称之后传递:

const title = definemodel('title', { required: true })

绑定多个v-model

<username
  v-model:first-name="first"
  v-model:last-name="last"
/>
<script setup>
const firstname = definemodel('firstname')
const lastname = definemodel('lastname')
</script>
<template>
  <input type="text" v-model="firstname" />
  <input type="text" v-model="lastname" />
</template>

到此这篇关于vue3 definemodel的使用示例详解的文章就介绍到这了,更多相关vue3 definemodel使用内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com