已解决
vue3中使用v-model实现父子组件数据同步
来自网友在路上 134834提问 提问时间:2023-10-28 11:46:28阅读次数: 34
最佳答案 问答题库348位专家为你答疑解惑
文章目录
- 前言
- 方法一
- 方法二
- 方法三
- 后言
前言
hello world欢迎来到前端的新世界
😜当前文章系列专栏:Vue.js
🐱👓博主在前端领域还有很多知识和技术需要掌握,正在不断努力填补技术短板。(如果出现错误,感谢大家指出)🌹
💖感谢大家支持!您的观看就是作者创作的动力
方法一
绑定单个v-model,并且使用modelValue接收,是匿名的,也可以命名,看第二种方法
父组件
<template><div><MyInput ref="myinput" v-model="valueKey"></MyInput>{{valueKey}}<button @click="click1">nn</button></div>
</template><script setup lang="ts">
import MyInput from "@/model/Myinput.vue";
import { ref } from "vue";
let myinput = ref(null)let valueKey = ref("传递");let click1 = ()=>{myinput.value.params();
}</script><style lang="less" scoped></style>
子组件
<template><div><input type="text" v-model="val" @input="Editval"></div>
</template><script setup lang="ts">import {ref} from "vue";const props = defineProps(['modelValue'])
const emit = defineEmits(['update:modelValue'])let val = ref(props.modelValue)let timer = null;const Editval = (e:Event)=>{emit('update:modelValue',(e.target as HTMLInputElement).value)
}</script><style lang="less" scoped></style>
总结:父组件正常传递,子组件通过modelValue来接受,然后使用emit(“update:modelValue”,参数)来修改
方法二
绑定多个v-model
父组件
<template><div><MyInput v-model:valueKey="valueKey" v-model:valueIndex="valueIndex"></MyInput>key:{{valueKey}}<br>index:{{valueIndex}}<br></div>
</template><script setup lang="ts">
import MyInput from "@/model/Myinput.vue";
import { ref } from "vue";let valueKey = ref("传递");
let valueIndex = ref("aaaa");</script><style lang="less" scoped></style>
子组件
<template><div><input type="text" v-model="val" @input="Editval" /><input type="text" v-model="ind" @input="Editind" /></div>
</template><script setup lang="ts">
import { ref } from "vue";const props = defineProps(["valueKey", "valueIndex"]);
const emit = defineEmits(["update:valueKey", "update:valueIndex"]);let val = ref(props.valueKey);
let ind = ref(props.valueIndex);let timer = null;
const Editval = (e: Event) => {if (timer) {clearTimeout(timer);}timer = setTimeout(() => {emit("update:valueKey", (e.target as HTMLInputElement).value);}, 500);
};const Editind = (e: Event) => {emit("update:valueIndex", (e.target as HTMLInputElement).value);
};</script><style lang="less" scoped></style>
总结:多个v-model可以使用: 来进行一个命名,然后子组件接收
子组件的修改valueKey的值我是采用了一个防抖函数
方法三
如果只有一个匿名v-model的传递的话,可以使用vue3.3新添加的编译宏,defineModel来使用
注意:因为defineModel的实现属性在vue3默认中是关闭的需要配置在vite.config.ts文件中配置,vue()里面配置为defineModel配置为true
export default defineConfig({plugins: [vue({script:{defineModel:true}})],
})
父组件
<template><div><MyInput v-model="valueKey"></MyInput>key:{{valueKey}}</div>
</template><script setup lang="ts">
import MyInput from "@/model/Myinput.vue";
import { ref } from "vue";let valueKey = ref("传递");</script><style lang="less" scoped></style>
子组件
<template><div><input type="text" v-model="val"/></div>
</template><script setup lang="ts">
let val = defineModel()</script><style lang="less" scoped></style>
后言
创作不易,要是本文章对广大读者有那么一点点帮助 不妨三连支持一下,您的鼓励就是博主创作的动力
查看全文
99%的人还看了
相似问题
- Tekton — 通过tekton-operator部署tekton组件
- vue3中使用全局自定义指令和组件自定义指令
- HarmonyOS ArkTS 基础组件的使用(四)
- 界面控件DevExpress WPF流程图组件,完美复制Visio UI!(一)
- Vue2系列 -- 组件自动化全局注册(require.context)
- 扩散模型实战(十一):剖析Stable Diffusion Pipeline各个组件
- django DRF认证组件示例
- MySQL内部组件与日志详解
- 前端新手Vue3+Vite+Ts+Pinia+Sass项目指北系列文章 —— 第五章 Element-Plus组件库安装和使用
- 修改el-radio-group样式,自定义单选组件
猜你感兴趣
版权申明
本文"vue3中使用v-model实现父子组件数据同步":http://eshow365.cn/6-26766-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!
- 上一篇: 数据库调优(Mysql)
- 下一篇: 前端将图片储存table表格中,页面回显