首页 > 其他分享 >vue3在父子组件使用v-model双向绑定

vue3在父子组件使用v-model双向绑定

时间:2023-08-12 15:23:00浏览次数:48  
标签:const -- 绑定 vue3 组件 InputBox model modelValue props

父组件:

<script setup>
import InputBox from "@/compon/InputBox.vue";
import {ref} from "vue";

const count = ref(100)
</script>

<template>
  <div>
    我是父组件, {{ count }}
    <InputBox v-model="count"></InputBox>
    <!-- 在vue3的子父组件中使用v-model相当于下面这行代码 -->
    <!--<InputBox :modelValue="count" @update:modelValue="count=$event"></InputBox>-->

    <!-- vue2就相当于这行代码:-->
    <!-- <InputBox :value="count" @input="count=$event"></InputBox> -->
    <!-- vue2就有时候你并不想传递给子组件的props叫value,此时会用.sync修饰符:-->
    <!-- <InputBox :myvalue.sync="count"></InputBox> -->
    <!-- .sync就相当于下面这行代码,等同于简化了代码的编写。 -->
    <!-- <InputBox :myvalue="count" @update:myvalue="count=$event"></InputBox> -->
    
    <!-- 然后对比一看。。。其实vue3中的v-model就是和.sync是一个球样... -->
  </div>
</template>

封装一个InputBox子组件,用于数据的加减

<script setup>
// 1. 和vue2一样,先通过props接收数据
const props = defineProps(['modelValue']);
// 2. 和vue2一样,也是要使用emit来触发父组件的事件
const emits = defineEmits(['update:modelValue']);
const ChangeNum = (num) => {
  emits('update:modelValue', props.modelValue+num)
}
</script>

<template>
  <div class="son">
    <button @click="ChangeNum(1)">-</button>
    <input style="width: 50px;" type="text" :value="modelValue">
    <button @click="ChangeNum(-1)">+</button>
  </div>
</template>

<style scoped>
.son {
  border: 1px solid red;
  padding: 30px;
  width: 300px;
}
</style>

思考:

觉得每次在子组件中定义emit和props很麻烦?vue3.3添加了一个实验性特新defineModel,详细见下一篇笔记。

标签:const,--,绑定,vue3,组件,InputBox,model,modelValue,props
From: https://www.cnblogs.com/juelian/p/17624861.html

相关文章

  • vue3.3实验性新特性defineModel
    子父之间使用v-model双向绑定数据,子组件每次都要写emit和props觉得麻烦?vue3.3新的实验性特性defineModel可以完全不写emit和props。由于是实验性特性,所以需要配置之后才能使用。修改vite.config.js:exportdefaultdefineConfig({plugins:[vue(**{script:{......
  • 静态绑定和动态绑定
    在面向对象程序中,绑定指的是一个方法的调用与方法所在的类(方法主体)关联起来,是一个把过程调用和响应调用所需要执行的代码加以结合的过程。绑定分为静态绑定(前期绑定)和动态绑定(后期绑定)。(1)静态绑定:指在程序编译过程中,把函数(方法或者过程)调用与响应调用所需的代码结合的过程。......
  • Vue全家桶系~2.Vue3开篇(过渡)
    Vue全家桶先贴一下Vue3的官方文档:https://cn.vuejs.org/guide/introduction.html官方API文档:https://cn.vuejs.org/api/1.前言:新旧时代交替1.1.开发变化1.网络模型的变化:以前网页大多是b/s,服务端代码混合在页面里;现在是c/s,前后端分离,通过jsapi(类似ajax的方式)获取j......
  • FTData063468_000001升级脚本出错,错误信息:SQL 脚本: 18.000.000.0048 DATA_DSTR_EAP_M
    一、问题:cjt15.0版本升级到18.0提示SQL脚本:18.000.000.0048DATA_DSTR_EAP_Mix_NL-11001出错:已在列上绑定了DEFAULT023-08-1019:46:39开始升级....2023-08-1019:46:39正在校验系统信息,请稍候...2023-08-1019:46:39[(000001)****]:开始升级2023-08-1019:46:39[(......
  • 使用LiveData、ViewModel在Activity和Fragment,Fragment和Fragment之间共享数据
    一、概述传统的Activity与Fragment之间共享数据,Fragment与Fragment之间共享数据,我一般会采用EventBus事件总线来实现。不过现在可以借助另外一种简单的方式LiveData+ViewModel也可以实现这种共享二、代码示例示例描述:要求FragmentA发送出数据,FragmentB和Activity都能接......
  • 简单介绍LiveData、ViewModel以及使用二者封装一个简单的基类用于测试
    一、概述1.LiveData概述什么事LiveData?1.LiveData是一种可观察的数据存储器类2.LiveData是一个数据持有者,给源数据包装一层。3.源数据使用LiveData包装后,可以被observer观察,数据有更新时observer可感知。4.但observer的感知,只发生在(Activity/Fragment......
  • 模拟Vue2的v-model
    模拟Vue2的v-model<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title></head><body><div><!--<buttonid="myBtn">改变user......
  • uniapp Vue2升级Vue3使用Vite分包
    uniappVue2使用webpack打包配置根目录下创建vue.config.js文件constpath=require('path')constCopyWebpackPlugin=require('copy-webpack-plugin')//最新版本copy-webpack-plugin插件暂不兼容,推荐v5.0.0letfilePath=''letTimestamp=''//......
  • vue3+vite+view-ui-plus 实现按需引用
    现有项目使用的是vue3+vite+view-ui-plus由于公司要求秒开速度对h5页面进行优化,首先想到的是把组件的引用从全量引用打包改成按需引用;下面是改之前的 view-ui-plus引用配置,简单粗暴直接在main.ts中引用  importViewUIPlusfrom'view-ui-plus'import'view-ui-plus/d......
  • Unity的AssetPostprocessor之Model:深入解析与实用案例 1
    UnityAssetPostprocessor模型相关函数详解在Unity中,AssetPostprocessor是一个非常有用的工具,它可以在导入资源时自动执行一些操作。在本文中,我们将重点介绍AssetPostprocessor中与模型相关的函数,并提供多个使用例子。OnPostprocessModelOnPostprocessModel是AssetPostprocesso......