Vue组件入门(八)v-model + 自定义参数

简介: Vue组件入门(八)v-model + 自定义参数

前言


在vue2中,一个组件上只能使用一个使用一个v-model,但是在vue3中,做了很大的改动,它允许你给v-mode 绑定参数,使用的传递的prop可以自定义。而这一绑定参数的改动,带给我一个好处,就是,可以在组件上使用多个v-model。而具体怎么做呢?我们来看一看。


v-model 的参数


回想一下,我们在组件绑定v-model的时候,他会转换成什么?


他会使用modelValue作为默认prop,使用update:modelValue作为对应的默认监听事件。


而我们想改变默认值的时候,就可以通过绑定参数来实现自定义。


<MyComponent v-model:name="name" />
复制代码


这样的话,他就会转换成name 的prop以及update:name的事件。所以,在子组件中,我们只需要接受这个prop,和派发对应的事件就可以了。


<!-- MyComponent.vue -->
<script setup>
defineProps(['name'])
defineEmits(['update:name'])
</script>
<template>
  <input
    type="text"
    :value="name"
    @input="$emit('update:name', $event.target.value)"
  />
</template>
复制代码


这样,我们就实现了一个自定义的v-model。


多个v-model


想必学会了绑定自定义参数,对于多个v-model绑定你也有自己的思路。下面我们来看看是怎么实现的。


父组件中:


<Book
  v-model:author ="author"
  v-model:price="price"
/>
复制代码


子组件中:


<script setup>
defineProps({
  author: String,
  price: String
})
defineEmits(['update:author', 'update:price'])
</script>
<template>
  <input
    type="text"
    :value="author"
    @input="$emit('update:author', $event.target.value)"
  />
  <input
    type="text"
    :value="price"
    @input="$emit('update:price', $event.target.value)"
  />
</template>
复制代码


这样我们就实现多个v-model的绑定,每一个自定义v-model绑定的参数都会生成对应的prop,而这声明的prop也会通过监听的事件的触发进行相应的更新。


也就是说我们完成了v-model 的双向绑定,完成数据的输入赋值更新。

相关文章
|
10天前
|
缓存 JavaScript UED
Vue3中v-model在处理自定义组件双向数据绑定时有哪些注意事项?
在使用`v-model`处理自定义组件双向数据绑定时,要仔细考虑各种因素,确保数据的准确传递和更新,同时提供良好的用户体验和代码可维护性。通过合理的设计和注意事项的遵循,能够更好地发挥`v-model`的优势,实现高效的双向数据绑定效果。
113 64
|
17天前
|
缓存 JavaScript 前端开发
vue学习第四章
欢迎来到我的博客!我是瑞雨溪,一名热爱JavaScript与Vue的大一学生。本文介绍了Vue中计算属性的基本与复杂使用、setter/getter、与methods的对比及与侦听器的总结。如果你觉得有用,请关注我,将持续更新更多优质内容!🎉🎉🎉
33 1
vue学习第四章
|
17天前
|
JavaScript 前端开发
vue学习第九章(v-model)
欢迎来到我的博客,我是瑞雨溪,一名热爱JavaScript与Vue的大一学生,自学前端2年半,正向全栈进发。此篇介绍v-model在不同表单元素中的应用及修饰符的使用,希望能对你有所帮助。关注我,持续更新中!🎉🎉🎉
27 1
vue学习第九章(v-model)
|
17天前
|
JavaScript 前端开发 开发者
vue学习第十章(组件开发)
欢迎来到瑞雨溪的博客,一名热爱JavaScript与Vue的大一学生。本文深入讲解Vue组件的基本使用、全局与局部组件、父子组件通信及数据传递等内容,适合前端开发者学习参考。持续更新中,期待您的关注!🎉🎉🎉
32 1
vue学习第十章(组件开发)
|
JavaScript 测试技术 容器
Vue2+VueRouter2+webpack 构建项目
1). 安装Node环境和npm包管理工具 检测版本 node -v npm -v 图1.png 2). 安装vue-cli(vue脚手架) npm install -g vue-cli --registry=https://registry.
1057 0
|
23天前
|
JavaScript 前端开发
如何在 Vue 项目中配置 Tree Shaking?
通过以上针对 Webpack 或 Rollup 的配置方法,就可以在 Vue 项目中有效地启用 Tree Shaking,从而优化项目的打包体积,提高项目的性能和加载速度。在实际配置过程中,需要根据项目的具体情况和需求,对配置进行适当的调整和优化。
|
23天前
|
存储 缓存 JavaScript
在 Vue 中使用 computed 和 watch 时,性能问题探讨
本文探讨了在 Vue.js 中使用 computed 计算属性和 watch 监听器时可能遇到的性能问题,并提供了优化建议,帮助开发者提高应用性能。
|
23天前
|
存储 缓存 JavaScript
如何在大型 Vue 应用中有效地管理计算属性和侦听器
在大型 Vue 应用中,合理管理计算属性和侦听器是优化性能和维护性的关键。本文介绍了如何通过模块化、状态管理和避免冗余计算等方法,有效提升应用的响应性和可维护性。
|
23天前
|
存储 缓存 JavaScript
Vue 中 computed 和 watch 的差异
Vue 中的 `computed` 和 `watch` 都用于处理数据变化,但使用场景不同。`computed` 用于计算属性,依赖于其他数据自动更新;`watch` 用于监听数据变化,执行异步或复杂操作。
|
22天前
|
JavaScript 前端开发 UED
vue学习第二章
欢迎来到我的博客!我是一名自学了2年半前端的大一学生,熟悉JavaScript与Vue,目前正在向全栈方向发展。如果你从我的博客中有所收获,欢迎关注我,我将持续更新更多优质文章。你的支持是我最大的动力!🎉🎉🎉
29 3