Vue3.3新特性defineModel

ops/2024/10/18 19:25:08/

defineModel的使用:

defineModel选项可以帮我们省去很多麻烦

不仅需要上述操作,还需要进行一定的配置:

在vite.config.js中进行配置


defineModel是一个宏,所以不需要从vue中import导入,直接使用就可以了。这个宏可以用来声明一个双向绑定 prop,通过父组件的 v-model 来使用。

父组件:

javascript"><template><CommonInput v-model="inputValue" />
</template><script setup lang="ts">
import { ref } from "vue";const inputValue = ref();
</script>

子组件:

javascript"><template><input v-model="model" />
</template><script setup lang="ts">
const model = defineModel();
model.value = "xxx";
</script>

在上面的例子中我们直接将defineModel的返回值使用v-model绑定到input输入框上面,无需定义 modelValue 属性和监听 update:modelValue 事件,代码更加简洁。defineModel的返回值是一个ref,我们可以在子组件中修改model变量的值,并且父组件中的inputValue变量的值也会同步更新,这样就可以实现双向绑定。

同一个变量不要进行多个双向绑定:

 使用arco组件的时候,自己封装的组件遇到的一个问题:

javascript"><a-tab-pane key="1" :title="`全部${total_1} `"><comment-tableref="comTable1"v-model:delete="deleteDialog1"v-model:audit="auditDialog1"v-model:total="total_1"v-model:search="searchTerm"itemType="1"@update:enabled="updateButtonState"></comment-table></a-tab-pane><a-tab-pane key="2" :title="`待审${total_2}`"><comment-tableref="comTable2"v-model:delete="deleteDialog2"v-model:audit="auditDialog2"v-model:search="searchTerm"v-model:total="total_2"itemType="2"@update:enabled="updateButtonState"></comment-table></a-tab-pane><a-tab-pane key="3" :title="`已批准${total_3}`"><comment-tableref="comTable3"v-model:delete="deleteDialog3"v-model:audit="auditDialog3"v-model:search="searchTerm"v-model:total="total_3"itemType="3"@update:enabled="updateButtonState"></comment-table></a-tab-pane>

 最开始的时候v-model三个自己封装的组件comment-table绑定的都是同一个属性,比如:

javascript">          v-model:delete="deleteDialog"v-model:audit="auditDialog"v-model:search="searchTerm"

复用三个就会出现问题,导致我对第二个子项操作的时候,莫名奇妙itemType就会从2变成3
最后修改成三个区分的变量就没问题了

原因:

v-model 是用于双向绑定的指令,通常用于将父组件的状态与子组件的内部状态进行同步。每个 v-model 都会绑定到一个特定的属性。这意味着在同一时间内,你不能将多个 v-model 指令绑定到同一个变量,因为这会导致数据冲突和不确定的行为。

  1. 数据冲突:

    • 如果多个 v-model 绑定到同一个变量,更新其中一个会导致其他绑定的变量也发生变化,从而产生不一致的状态。
  2. 双向绑定的复杂性:

    • 双向绑定的设计是为了让数据在父子组件之间保持同步。如果多个组件同时尝试更新同一个数据源,可能会导致难以预料的结果。
  3. 组件实例化:

    • 每个 comment-table 实例可能会有不同的状态和逻辑,试图将它们绑定到同一个变量会使得状态管理变得复杂和混乱。

http://www.ppmy.cn/ops/118196.html

相关文章

24/9/24 算法笔记 超参数优化算法

在机器学习中&#xff0c;优化超参数的算法是至关重要的&#xff0c;因为它们可以帮助我们找到最佳的模型配置&#xff0c;从而提高模型的性能。以下是一些常用的超参数优化算法&#xff1a; 网格搜索&#xff08;Grid Search&#xff09;&#xff1a;这是一种穷举搜索的方法&a…

计算机毕业设计 招生宣传管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

友元运算符重载函数

目录 1.定义友元运算符重载函数的语法形式 2.双目运算符重载 3.单目运算符重载 1.定义友元运算符重载函数的语法形式 &#xff08;1&#xff09;在类的内部&#xff0c;定义友元运算符重载函数的格式如下&#xff1a; friend 函数类型 operator 运算符&#xff08;形参表&a…

mqtt网关数据接入rabbitmq,缓存离线数据,实现消息保留

应用场景&#xff1a;网关将设备数据发布至mqtt服务器后&#xff0c;数采程序因为重启或者升级等原因&#xff0c;未能接到到离线的订阅消息&#xff0c;利用rabbitmq-mqtt可将离线数据缓存&#xff0c;待上线后接收 启用mqtt插件 rabbitmq-plugins enable rabbitmq_mqtt

【韩顺平Java笔记】第2章:Java概述

按视频的标号来对应小标题&#xff0c;自用学习笔记 文章目录 5. 内容梳理6. 程序举例6.1 什么是程序 7. Java故事7.1 Java诞生小故事7.2 Java技术体系平台 8. Java特性8.1 Java重要特点 9. sublime10. jdk介绍10.1 Java运行机制及运行过程10.1.1 Java虚拟机&#xff08;JVM&a…

ASPICE的商业价值:提升汽车软件开发竞争力与质量保障

ASPICE&#xff08;Automotive SPICE&#xff09;作为汽车行业用于评价软件开发团队的研发能力水平的模型框架&#xff0c;其商业价值主要体现在以下几个方面&#xff1a; 一、提升软件质量和可靠性 标准化流程&#xff1a;ASPICE要求供应商按照其标准流程进行软件设计与开发&…

基于Vue3组件封装的技巧分享

本文在Vue3的基础上针对一些常见UI组件库组件进行二次封装&#xff0c;旨在追求更好的个性化&#xff0c;更灵活的拓展&#xff0c;提供一些个人的思路见解&#xff0c;如有不妥之处&#xff0c;敬请指出。核心知识点$attrs,$slots 需求 需求背景 日常开发中&#xff0c;我们经…

代码随想录算法训练营||二叉树

前/中/后序遍历 递归方式 参考文章 题目 思路&#xff1a;其实递归方式的前中后序遍历的方式都差不多&#xff0c;区别是在父节点的遍历时间。 前序代码 class Solution {public List<Integer> preorderTraversal(TreeNode root) {List<Integer> result new…