IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> Vue v-mode的原理与使用 -> 正文阅读

[JavaScript知识库]Vue v-mode的原理与使用

日常开发中我们不可避免要用到表单提交数据,因此我们就会使用v-model指令。接下来我们就来讨论一下v-model的实现原理吧

原生元素使用v-model

<input v-model="message"></input>

上边代码等价于

<input :value="message" @input="message = $event.target.value"></input>

解析
v-model实际就是一个语法糖,它包含两个步骤,
第一步:绑定value的值
第二步:当input的值改变时把当前值赋值给绑定的value

组件上使用v-model

<!-- 父组件 -->
<h3>我是父组件:{{msg}}</h3>
<CustomInput v-model="msg"></CustomInput>
<!-- CustomInput 子组件 -->
<template>
  <input :value="modelValue" @input="$emit('update:modelValue', $event.target.value)"></input>
</template>

<script setup>
// 定义Props
defineProps(['modelValue'])
// 定义自定义事件
defineEmits(['update:modelValue'])
</script>

解析
默认情况下组件绑定的值是modelValue,而触发的update:modelValue方法来修改modelValue的值

我们也可以使用computed计算属性实现组件的v-model指令

使用计算属性实现v-model

<!-- CustomInput 子组件 -->
<template>
  <input v-model="value" />
</template>

<script setup>
import { computed } from 'vue';
// 定义Props
const props = defineProps(['modelValue'])
// 定义自定义事件
const emit = defineEmits(['update:modelValue'])
// 使用计算属性响应式数据
const value = computed({
  get() {
    return props.modelValue
  },
  set(value) {
    emit('update:modelValue', value)
  }
})
</script>

一个组件多个v-model

<!-- CustomInput 子组件 -->
<template>
  我是自定义组件:
  <input :value="modelValue" @input="$emit('update:modelValue', $event.target.value)">

  <div>
    姓:
    <input :value="firstName" @input="changeFirstName($event)" />
    名:
    <input v-model="second_name" />
  </div>
</template>

<script setup>
 	// 导入计算函数
	import { computed } from 'vue';
	// 定义props
  const props = defineProps(['modelValue', 'firstName', 'secondName'])
  // 定义emit触发方法
  const emit = defineEmits(['update:modelValue', 'update:firstName', 'update:secondName'])

  // 修改姓
  const changeFirstName = function (e) {
    emit('update:firstName', e.target.value)
  }
  // 修改名 使用计算属性修改
  const second_name = computed({
    get() {
      return props.secondName
    },
    set(value) {
      emit('update:secondName', value)
    }
  })
</script>
<!-- 父组件 -->
<h3>我是父组件:{{msg}}</h3>
<h4>我的名字是:{{firstName + secondName}}</h4>
<CustomInput v-model="msg" v-model:firstName="firstName" v-model:secondName="secondName"></CustomInput>

在这里插入图片描述

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-09-24 20:47:38  更:2022-09-24 20:50:51 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 10:48:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码