49 el-input 的 模型 视图 双向同步

news2024/9/19 10:02:15

前言

这里来看一下 el-input 这边的 数据 和 视图的双向绑定

最开始 我以为 这部分的处理应该是 vue 这边实现的, 但是跟踪调试了一下 发现这部分的处理是业务这边 自己实现的

这部分 还是有一些 值得记录的东西, 从这里 要去理解的而是 vue 这边从宏观的框架上面来说 帮我们实现了那些数据的数据视图联动

我们这里来看一下 这里 el-input 这边的 数据 -> 视图 的同步 和 视图 -> 数据 的同步的处理

然后 这里为了调试 el-input 的代码, 需要将测试用例 放在 element-ui 的源代码中, 编译运行起来

 

 

测试用例

这里就是一个简单的 el-input 的使用, 以及一个 5s 之后更新 checkItem 的数据

然后 checkItem 数据更新之后, 会自动同步到视图, 这个就是 数据 -> 视图 的同步

如果是更新了输入框的值, 然后 checkItem 自动获取了改动后的值, 这个就是 视图 -> 数据 的同步

<template>
  <div class="testParent" >
    <el-input v-model="checkItem" ></el-input>
  </div>
</template>

<script>
  import UserDefinedModelInput from '../packages/input/src/UserDefinedModelInput';
  import UserDefinedModelParent from '../packages/input/src/UserDefinedModelParent';
  export default {
    name: 'App',
    components: {
      UserDefinedModelInput,
      UserDefinedModelParent,
    },
    data() {
      return {
        checkItem: 'check'
      };
    },
    computed: {},
    created() {
    },
    mounted() {
      let _this = this;
      setTimeout(function() {
        _this.checkItem = 'updated check';
      }, 5000);
    },
    methods: {
      handleClick($event, item) {
        console.log(' clicked item ', $event, item);
      }
    }
  };
</script>

<style>

</style>

 

 

el-input 数据 -> 视图 的同步

我们这里主要看 两个点, 一个是 checkItem 初始化的时候, 另外有个是 checkItem 更新的时候

checkItem 初始化的时候的处理如下 nativeInputValue 是一个 computed 属性, 数据来自于 value, 即我们外面 el-input v-model 传入的 checkItem

这里是在 el-input 组件初始化的时候 就开始的一次数据同步, 将 输入框 的数据更新为业务侧初始化的数据

e39279a6d4414604a99bad0b5b9a6d52.png

 

其次是 checkItem 5s 之后数据更新的时候

这里是 el-input 中 watch 了 nativeInputValue, 当 value 数据发生改变的时候触发了这里的 数据 -> 视图 的数据同步

处理同样是获取到 input 框, 更新它的 value

9bc447d448e04b67b85dc5d787131bbe.png

 

 

el-input 视图 -> 数据 的同步

这个是 vue 这边自己实现的, el-input 这边更新了数据之后, 提交了一个 input 事件

然后 vue 这边在 render 的父组件增加了一个 处理的回调, 来更新父组件的 checkItem

然后 checkItem 是父子组件双向同步的, 子组件能够感知到数据的变化

f5e05ce91b8d4f938b07e07d23dc3c2e.png

 

同时也会触发 setNativeInputValue 的回调, 这里做了 截断处理

4482bf9d193b4d8b9d160898013f36b1.png

 

 

vue 这边框架层面实现的 数据 -> 视图的绑定

这个就在 patchVNode 里面一看就好了

同步更新 属性, class, dom事件, dom属性, 样式 等等

属性主要是指的是 dom 元素的 set/getAttribute 读写的相关数据

dom属性主要是指的是 dom 元素 本身的各个字段  

b62b32f64ed742f6a266a1f11cf866c6.png

 

 

完 

 

 

 

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

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

相关文章

mac系统使用经验

mac安装brew brew是macos下的一个包管理工具&#xff0c;类似与centos的yum&#xff0c;ubuntu的apt-get等。 自动脚本(全部国内地址)&#xff08;在Mac os终端中复制粘贴回车下面这句话) /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/H…

基于CNN-RNN的动态手势识别系统实现与解析

一、环境配置 为了成功实现基于CNN-RNN的动态手势识别系统&#xff0c;你需要确保你的开发环境已经安装了以下必要的库和工具&#xff1a; Python&#xff1a;推荐使用Python 3.x版本&#xff0c;作为主要的编程语言。TensorFlow&#xff1a;深度学习框架&#xff0c;用于构建…

开放平台 - 互动玩法演进之路

本期作者 1. 背景 随着直播业务和用户规模日益壮大&#xff0c;如何丰富直播间内容、增强直播间内用户互动效果&#xff0c;提升营收数据变得更加关键。为此&#xff0c;直播互动玩法应运而生。通过弹幕、礼物、点赞、大航海等方式&#xff0c;用户可以参与主播的直播内容。B站…

书生·浦语大模型实战营(第二期):书生·浦语大模型全链路开源体系

非常开心能够参加到第二期的书生浦语大模型实战营&#xff0c;经过第一期的学习&#xff0c;初步了解了如何使用xtuner对模型进行微调&#xff0c;以及如何部署。遗憾的是没有更加深入学习并实现一个项目&#xff0c;此次学习过程中希望可以更进一步。 大模型称为发展通用人工…

安卓国内ip代理app,畅游网络

随着移动互联网的普及和快速发展&#xff0c;安卓手机已经成为我们日常生活和工作中不可或缺的一部分。然而&#xff0c;由于地理位置、网络限制或其他因素&#xff0c;我们有时需要改变或隐藏自己的IP地址。这时&#xff0c;安卓国内IP代理App便成为了一个重要的工具。虎观代理…

C++——C++11线程库

目录 一&#xff0c;线程库简介 二&#xff0c;线程库简单使用 2.1 传函数指针 ​编辑 2.2 传lamdba表达式 2.3 简单综合运用 2.4 线程函数参数 三&#xff0c;线程安全问题 3.1 为什么会有这个问题&#xff1f; 3.2 锁 3.2.1 互斥锁 3.2.2 递归锁 3.3 原子操作 3…

Java代码混淆技术的进阶应用与优化策略探讨

摘要 本文探讨了代码混淆在保护Java代码安全性和知识产权方面的重要意义。通过混淆技术&#xff0c;可以有效防止代码被反编译、逆向工程或恶意篡改&#xff0c;提高代码的安全性。常见的Java代码混淆工具如IPAGuard、Allatori、DashO、Zelix KlassMaster和yGuard等&#xff0…

ERROR: No matching distribution found for tb-nightly

问题描述 安装tb-lightly失败&#xff1a;ERROR: No matching distribution found for tb-nightly 解决方案 因为我的镜像源默认是清华的&#xff0c;但是pip源中没有对应的“tb-nightly”依赖包。 如果不知道的&#xff0c;也可以查看一下pip的配置&#xff1a; python -m …

12.Java语言的发展

JAVA语言的诞生是具有一定戏剧性的&#xff0c;可以说是命运多舛&#xff0c;差点凉凉&#xff0c;差点GG&#xff0c;差点嗝屁。 在1990年的时候Sun&#xff08;Stanford University Network&#xff1a;斯坦福大学网络&#xff09;公司成立了一个由 James Gosling 领导的Gree…

2024软件设计师备考讲义——(3)

程序设计语言 一、程序语言基础 1.基本概念 低级语言&#xff1a;机器语言、汇编语言高级语言&#xff1a; Fortran 科学计算&#xff0c;执行效率高Pascal 为教学开发&#xff0c;表达能力强Prolog 逻辑性程序设计语言C语言 指针操作能力强&#xff0c;可以开发系统级软件&a…

【计算机网络】第 9 问:四种信道划分介质访问控制?

目录 正文什么是信道划分介质访问控制&#xff1f;什么是多路复用技术&#xff1f;四种信道划分介质访问控制1. 频分多路复用 FDM2. 时分多路复用 TDM3. 波分多路复用 WDM4. 码分多路复用 CDM 正文 什么是信道划分介质访问控制&#xff1f; 信道划分介质访问控制&#xff08;…

Go语言学习Day6:数组与切片

名人说&#xff1a;莫愁千里路&#xff0c;自有到来风。 ——钱珝 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 1. 数组① 什么是数组② 数组的声明③ 初始化数组的几种方式④ 遍历数组元素⑤ 数组为值类型⑥ 数…

深入理解Vue 3.0中Async/Await 语法

引言 在 JavaScript 中&#xff0c;异步操作一直是一个挑战&#xff0c;因为它们通常涉及回调函数的嵌套和复杂的 Promise 链式调用。为了解决这些问题&#xff0c;ES8 引入了 Async/Await 语法&#xff0c;它提供了一种更简洁、易读的方式来处理异步操作。 Async/Await 主要…

使用mysql官网软件包安装mysql

确定你的操作系统&#xff0c;我的是Centos myqsl 所有安装包的地址&#xff1a;https://repo.mysql.com/yum/ 如果你是使用rpm安装你可以到对应的版本里面找到对应的包。 mysql 发行包的地址&#xff1a;http://repo.mysql.com/ 在这里你可以找到对应的发布包安装。 这里使用y…

【3DsMax+Pt】练习案例

目录 一、在3DsMax中展UV 二、在Substance 3D Painter中绘制贴图 一、在3DsMax中展UV 1. 首先创建如下模型 2. 选中如下三条边线作为接缝 重置剥 发现如下部分还没有展开 再选一条边作为接缝 再次拨开 拨开后的UV如下 二、在Substance 3D Painter中绘制贴图 1. 新建项目&am…

MIPI RFFE接口

1. 概况 MIPI RFFE是一种专门针对当前及未来无线系统在射频(RF)前端控制界面规范。随着手机射频系统日趋复杂&#xff0c;业界需要一个单一控制界面解决方案。MIPI联盟的RF前端控制界面(RFFE)规范通过提供一个可连接到收发器或无线电的总线界面解决了这一难题&#xff0c;可用于…

【机器学习】数据探索(Data Exploration)---数据质量和数据特征分析

一、引言 在机器学习项目中&#xff0c;数据探索是至关重要的一步。它不仅是模型构建的基础&#xff0c;还是确保模型性能稳定、预测准确的关键。数据探索的过程中&#xff0c;数据质量和数据特征分析占据了核心地位。数据质量直接关系到模型能否从数据中提取有效信息&#xff…

分布式部署LNMP+WordPress

需要四台虚拟机&#xff0c;实际上&#xff0c;我们只需要操作三台 一个数据库&#xff0c;一个nginx&#xff0c;一个php&#xff0c;还需要准备一个软件包wordpress-4.7.3-zh_C 首先配置nginx的服务环境 [rootnginx ~]# vi /usr/local/nginx/conf/nginx.conf 修改文件中的loc…

1.8 python 模块 time、random、string、hashlib、os、re、json

ython之模块 一、模块的介绍 &#xff08;1&#xff09;python模块&#xff0c;是一个python文件&#xff0c;以一个.py文件&#xff0c;包含了python对象定义和pyhton语句 &#xff08;2&#xff09;python对象定义和python语句 &#xff08;3&#xff09;模块让你能够有逻辑地…

从零开始的软件开发实战:互联网医院APP搭建详解

今天&#xff0c;笔者将以“从零开始的软件开发实战&#xff1a;互联网医院APP搭建详解”为主题&#xff0c;深入探讨互联网医院APP的开发过程和关键技术。 第一步&#xff1a;需求分析和规划 互联网医院APP的主要功能包括在线挂号、医生预约、医疗咨询、健康档案管理等。我们…