vue中v-model的原理是什么?v-model作用在组件上的原理是什么?sync修饰符的原理是什么?

news2024/9/25 13:25:59

vue中v-model的原理是什么?

特点:双向绑定

数据=>视图

视图=>数据

场景

  1. 收集表单数据
  2. 组件上

原理

v-model只是个语法题,本质是:v-model = v-bind (:value) + v-on (@input)

<template>
  <div id="app">
    <p>{{ text }}</p>
    <input type="text" v-model="text">
    <input type="text" :value="text" @input="(e) => (text = e.target.value)" />
  </div>
</template>

<script>
export default {
  name: "app",
  data() {
    return {
      text: "xxxxxxxx",
    };
  },
};
</script>

<style>
</style>

vue中v-model作用在组件上的原理是什么?

为什么要在组件上使用v-model,我们的目的是?

  1. v-model绑定的变量发生改变,能够影响组件的状态或行为,数据=>视图
  2. 组件内部状态或行为发生变化,能够影响v-model绑定的变量,视图=>数据

怎么做?

v-model其实就是 :value和@input事件的简写

  • 父组件:v-model直接绑定数据
  • 子组件:props通过value接收数据,事件触发 input

例子

App.vue

<template>
  <div id="app">
    <my-select v-model="city">
    </my-select>
  </div>
</template>

<script>

import MySelect from "./components/MySelect.vue";

export default {
  name: "app",
  components: {
    MySelect,
  },
  data() {
    return {
      city: 104,
    };
  },
};
</script>

<style>
</style>

MySelect.vue

<template>
  <div>
    <select :value="value" @change="selectCity">
      <option value="101">北京</option>
      <option value="102">上海</option>
      <option value="103">武汉</option>
      <option value="104">广州</option>
      <option value="105">深圳</option>
    </select>
  </div>
</template>

<script>
export default {
  props: {
    value: String,
  },
  methods: {
    selectCity(e) {
      this.$emit("input", e.target.value);
    },
  },
};
</script>

<style>
</style>

vue中sync修饰符的原理是什么?

.sync 是一个修饰符,用于在自定义组件中实现父子组件之间的双向数据绑定。

.sync主要应用于自定义组件之间的数据传递和状态管理,可以实现父子组件之间的双向数据流。通过 .sync,可以将父组件的数据传递给子组件,并且子组件可以修改这个数据并将修改的结果传递回父组件。

1 子组件改变父组件中的变量值

1.1 不使用sync

我们知道,vue中父组件是使用v-bind(缩写为:)给子组件传入参数,然后子组件通过prop属性接收该参数。此时我们可以给子组件传入一个函数,子组件通过调用传入的函数来改变父组件中参数的值。

在这里插入图片描述

在这里插入图片描述

即主要部分如下所示

<!-- 父组件给子组件传入一个setNum函数 -->
<child :num="numParent" @setNum="(res)=> numParent = res"></child>

//子组件通过调用这个函数来实现修改父组件的状态
methods: {
    changNum(){
      this.$emit('setNum',666)
}

此时子组件只需要触发changNum函数就能执行父组件中的setNum函数从而改变父组件中numParent的值

1.2 使用sync

上述方法较复杂,使用sync可简化写法

<!-- 父组件给子组件传入一个setNum函数 -->
<child :num.sync="numParent">

//子组件通过调用这个函数来实现修改父组件的状态
methods: {
    changNum(){
      this.$emit('update:num',666)
}

上述两种方式都可以将numParent的值由222变为666,其中父组件中绑定的参数后面加了一个.sync,子组件中的事件名称被换成了update:age,如下:

  • update:固定部分,vue约定俗成的,注意必须添加update:的前缀才能正确触发事件
  • num是要修改的参数的名称,是我们手动配置的,与传入的参数名字对应起来

2 实现父子组件双向绑定

vue考虑到组件的可维护性,是不允许子组件改变父组件传的props值的。父组件通过绑定属性的方式向子组件传值,而在子组件中可以通过$emit向父组件通信(通过1.1方式),通过这种间接的方式改变父组件的data,从而实现子组件改变props的值。

那么同时,vue中也提供了一种解决方案.sync修饰符(1.2方式)

在这里插入图片描述

允许子组件改变父组件传的props值的。父组件通过绑定属性的方式向子组件传值,而在子组件中可以通过$emit向父组件通信(通过1.1方式),通过这种间接的方式改变父组件的data,从而实现子组件改变props的值。

那么同时,vue中也提供了一种解决方案.sync修饰符(1.2方式)
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1074426.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

蓝牙资讯|三星推迟发布智能戒指Galaxy Ring,智能穿戴小型化是大趋势

根据外媒 The Elec 报道&#xff0c;Galaxy Ring这款戒指主要面向健康和 XR 头显市场&#xff0c;该智能戒指可能被延期至 2024 年第三季度后发布。 外媒声称三星 Galaxy Ring 的上市周期&#xff0c;主要取决医疗认证的相关审批时间&#xff0c;三星计划将在 2024 年第三季度…

2023年软件测试工具总结 —— 性能测试工具

软件性能测试的目标是识别应用程序中的所有性能瓶颈。一个软件系统的性能不仅取决于系统本身的设计和编码&#xff0c;而且取决于系统所依赖的运行环境。系统的运行环境会依赖于一些关键因素&#xff0c;例如&#xff1a;系统架构、硬件配置、网络带宽、配套的软件如数据库和中…

java多线程卖电影票的三种实现方式

java多线程卖电影票的三种实现方式 一、需求描述二、实现方式1、继承Thread类的方式2、实现Runnable接口的方式3、使用Lock锁的方式 一、需求描述 某电影院目前正在上映国产大片&#xff0c;共有1000张票&#xff0c;而它有2个窗口卖票&#xff0c;请设计一个程序模拟该电影院…

12.3 实现模拟鼠标录制回放

本节将向读者介绍如何使用键盘鼠标操控模拟技术&#xff0c;键盘鼠标操控模拟技术是一种非常实用的技术&#xff0c;可以自动化执行一些重复性的任务&#xff0c;提高工作效率&#xff0c;在Windows系统下&#xff0c;通过使用各种键盘鼠标控制函数实现动态捕捉和模拟特定功能的…

Ubuntu22.04.3安装教程

虚拟机系列文章 VMware Workstation Player 17 免费下载安装教程 VMware Workstation 17 Pro 免费下载安装教程 windows server 2012安装教程 Ubuntu22.04.3安装教程 FTP服务器搭建 Ubuntu22.04.3安装教程 虚拟机系列文章前言Ubuntu22.04.3安装&#xff08;图文&#xff09; 前…

【C++心愿便利店】No.7---C++之运算符重载

文章目录 前言一、运算符重载的引用二、运算符重载三、赋值运算符重载四、日期类的实现五、const成员六、取地址及const取地址操作符重载 前言 &#x1f467;个人主页&#xff1a;小沈YO. &#x1f61a;小编介绍&#xff1a;欢迎来到我的乱七八糟小星球&#x1f31d; &#x1f…

onlyoffice历史版本功能实现

一&#xff1a;开启客户端配置 如果不开启&#xff0c;回调请求里面的history和changeUrl是空 二&#xff1a;客户端主要实现2个回调函数 1.实现onRequestHistory事件&#xff0c;该事件会在ui点击查看历史的时候发起,用于展示历史列表 关键在于获取到history的内容&#xff…

Vscode进行远程开发

之前用的是pycharm&#xff0c;但是同事说pycharm太重了&#xff0c;连接远程服务器的时候给远程服务器的压力比较大&#xff0c;有时候远程服务器可能都扛不住&#xff0c;所以换成了vscode。 参考博客 手把手教你配置VS Code远程开发工具&#xff0c;工作效率提升N倍 - 知…

【自动驾驶】PETR/PETRv2/StreamPETR论文分析

1.PETR PETR网络结构如下&#xff0c;主要包括image-backbone, 3D Coordinates Generator, 3D Position Encoder, transformer Decoder 1.1 Images Backbone 采用resnet 或者 vovNet,下面的x表示concatenate 1.2 3D Coordinates Generator 坐标生成跟lss类似&#xff0c;假…

从零开始的SRC挖掘

前言 每一次成功的渗透&#xff0c;都有一个非常完备的信息搜集。 大师傅讲的好呀&#xff1a;信息搜集的广度决定了攻击的广度&#xff0c;知识面的广度决定了攻击的深度。 点击此处即可领取282G网络安全学习资料 信息搜集 信息搜集可以从多个领域来看&#xff1a; 公司…

springboot vue 部署至Rocky(Centos)并自启,本文部署是若依应用

概述 1、安装nohup&#xff08;后台进程运行java&#xff09; 2、安装中文字体&#xff08;防止中文乱码&#xff09; 3、安装chrony&#xff08;保证分布式部署时间的一致性&#xff09; 5、安装mysql数据&#xff0c;迁移目录&#xff0c;并授权自启动&#xff1b; 6、安…

基于JavaSpring的学生宿舍管理系统

点击以下链接获取源码&#xff1a; https://download.csdn.net/download/qq_64505944/88407844

Bootstrap网格系统的原理

Bootstrap 提供了一套响应式、移动设备优先的流式网格系统&#xff0c;随着屏幕或视口&#xff08;viewport&#xff09;尺寸的增加&#xff0c;系统会自动分为最多12列。 Bootstrap 网格系统&#xff08;Grid System&#xff09;的工作原理 网格系统通过一系列包含内容的行和…

HRM人力资源管理系统源码

HRM人力资源管理系统源码 运行环境&#xff1a;PHP8.1或以上 MYSQL5.7或以上 php扩展要求 fileinfo imagemagick 功能介绍&#xff1a; 综合仪表板 它通过其综合仪表板提供了员工总数、工单和帐户余额的概览。 您可以轻松访问组织中的缺席者以及详细的公告和预定会议列…

阿里云域名免费配置HTTPS

阿里云域名配置HTTPS - 知乎

零基础也能学会!Linux下安装RStudio工具及实现远程访问的详细指南

前言 RStudio Server 使你能够在 Linux 服务器上运行你所熟悉和喜爱的 RStudio IDE&#xff0c;并通过 Web 浏览器进行访问&#xff0c;从而将 RStudio IDE 的强大功能和工作效率带到基于服务器的集中式环境中。 下面介绍在Linux docker中安装RStudio Server并结合cpolar内网…

JuiceFS 目录配额功能设计详解

JuiceFS 在最近 v1.1 版本中加入了社区中呼声已久的目录配额功能。已发布的命令支持为目录设置配额、获取目录配额信息、列出所有目录配额等。完整的详细信息&#xff0c;请查阅文档。 在设计此功能时&#xff0c;对于它的统计准确性&#xff0c;实效性以及对性能的影响&#…

工业交换机的“自适应”是什么意思?

工业交换机诸多性能指标中&#xff0c;我们常常看见有“自适应”这个指标。它到底是什么意思呢&#xff1f; 自适应也叫自动匹配、自协商&#xff0c;以太网技术发展到100M速率以后&#xff0c;出现了一个如何与原10M以太网设备兼容的问题&#xff0c;自协商技术就是为了解决这…

python中一些代码提速技巧

目录 用set而非list进行查找用dict而非两个list进行匹配查找优先使用for循环而不是while循环循环代替递归用缓存机制加速递归函数用numba加速Python函数使用collections.Counter加速计数使用collections.ChainMap加速字典合并使用map代替推导式进行加速使用filter代替推导式进行…

nacos2.0.2漏洞分析及解决方法

绕过鉴权情况 1. userAgentAuthWhite 设置为true&#xff0c;官方没有还没有解析为啥可以通过设置userAgent可以绕过鉴权 实验一 只要把请求header&#xff1a;User-Agent设置为&#xff1a;Nacos-Server&#xff0c;即可绕过鉴权 实验二 只要把请求header&#xff1a;User…