当前位置: 首页 > article >正文

Vue3:v-model实现组件通信

目录

一.性质

1.双向绑定

2.语法糖

3.响应式系统

4.灵活性

5.可配置性

6.多属性绑定

7.修饰符支持

8.defineModel使用

二.使用

1.父组件

2.子组件

三.代码

1.父组件代码

2.子组件代码

四.效果


一.性质

在Vue3中,v-model指令的性质和作用主要体现在其双向数据绑定能力。v-model是Vue.js中一个强大的工具,用于实现表单输入和应用状态之间的同步更新。

1.双向绑定

v-model实现了数据的双向绑定,即当视图中的数据改变时,模型中对应的数据也会更新;反之亦然。

2.语法糖

v-model实际上是:modelValue和@input事件的组合,这种组合简化了开发者的编码工作,使得代码更加简洁易读。

3.响应式系统

通过Vue的响应式系统,v-model能够监听用户输入的变化,并将这些变化反映到应用的状态中,从而实现动态的视图更新。

4.灵活性

v-model不仅限于原生的HTML表单元素,还可以应用于自定义组件,提供了更大的灵活性和可扩展性。

5.可配置性

在Vue3中,v-model的使用变得更加灵活,允许开发者自定义绑定的属性名称和事件,这为处理复杂场景提供了更多可能性。

6.多属性绑定

v-model支持在同一组件上绑定多个属性,这使得组件可以同时与多个数据属性保持同步。

7.修饰符支持

Vue3还引入了修饰符的概念,允许开发者根据需要自定义v-model的行为,例如使用.lazy.number等修饰符来改变绑定的行为。

8.defineModel使用

从Vue 3.4开始,推荐使用defineModel宏来声明双向绑定的prop,这种方式更加直观且易于管理。

二.使用

1.父组件

2.子组件

将接收的value值赋给input元素的value属性,为了呈现数据

给input元素绑定原生input事件,触发input事件时,进而触发update:model-value事件

三.代码

1.父组件代码

<template>
    <div class="father">
        <h4>组件</h4>
	    
        <!-- 使用v-model指令 -->
        <input type="text" v-model="name">
        
        <!-- v-model的本质是下面这行代码 -->
        <!-- <input 
        type="text" 
        :value="name" 
        @input="name =(<HTMLInputElement>$event.target).value"> -->


        <!-- 组件标签上使用v-model指令 -->
        <CustomInput v-model="name"/>
        
        <!-- 组件标签上v-model的本质 -->
        <!-- <CustomInput :modelValue="name" @update:model-value="name = $event"/> -->
        
    </div>
</template>

<script setup lang="ts" name="father">
    import { ref } from "vue";
    import CustomInput from "../components/CustomInput.vue";

    let name = ref('zhangsan')
    
 
</script>


<style>
.father{
    background-color: skyblue;
}
h4{
    margin-left: 20px;
    font-size: 20px;
}
input{
    width: 200px;
    height: 40px;
    font-size: 20px;
    margin-left: 20px;
}

</style>

2.子组件代码

<template>

    <!--将接收的value值赋给input元素的value属性,目的是:为了呈现数据 -->
    <!--给input元素绑定原生input事件,触发input事件时,进而触发update:model-value事件-->
    <input 
        type="text" 
        :value="modelValue" 
        @input="emit('update:model-value',(<HTMLInputElement>$event.target).value)"
    >
    
</template>

<script setup lang="ts"  name="CustomInput">

    // 接收props
    defineProps(['modelValue'])
    // 声明事件
    const emit = defineEmits(['update:model-value'])

</script>


<style scoped>
input{
    border-width: 2px;
    border-color: orange;
    width: 200;
    height: 40;

}

</style>


四.效果


http://www.kler.cn/news/313058.html

相关文章:

  • Streamlit:使用 Python 快速开发 Web 应用
  • 大数据新视界 --大数据大厂之AI 与大数据的融合:开创智能未来的新篇章
  • Git入门学习(1)
  • HTTP中的Cookie与Session
  • pandoc自定义过滤器
  • 小程序构建npm失败
  • WPF 所有的控件和每个控件的主要作用和应用场景
  • 25届计算机专业毕设选题推荐-基于python+Django协调过滤的新闻推荐系统
  • 数学辅导微信小程序--论文ppt源码调试讲解
  • 执行网络攻击模拟的 7 个步骤
  • 注册建造师执业工程规模标准(公路工程铁路工程通信与广电工程民航机场工程港口与航道工程)
  • (c语言+数据结构链表)项目:贪吃蛇
  • 使用LangGPT提示词让大模型比较浮点数
  • 一天认识一个硬件之连接线
  • word-break和word-wrap
  • 实战Redis与MySQL双写一致性的缓存模式
  • 【4.4】图搜索算法-BFS和DFS两种方式解岛屿数量
  • WPF DataGrid 赋值与修改
  • Spring Boot利用dag加速Spring beans初始化
  • 无人机黑飞打击技术详解
  • 页面关键路径渲染详解
  • Python中使用Scikit-learn进行线性回归分析的实用指南
  • API应用安全风险倍增,F5助企业赢得关键安全挑战
  • esp32s3 NVS空间读写操作
  • Java 每日一刊(第13期):this super static
  • 【Redis入门到精通三】Redis核心数据类型(List,Set)详解
  • Qt 中 `QTimer`定时器的使用方法详解
  • 蓝禾,汤臣倍健,三七互娱,得物,顺丰,快手,游卡,oppo,康冠科技,途游游戏,埃科光电25秋招内推
  • Java并发集合框架:高效多线程数据访问
  • Flask 实现用户登录功能的完整示例:前端与后端整合(附Demo)