经过上一篇文章,已经将数据驱动界面改变的过程实现了,本章节将实现界面驱动数据更新的过程。

界面驱动数据更新的过程,主要是通过 v-model 指令实现的, 只有 v-model 指令才能实现界面驱动数据更新的过程。

好了,那么说了是通过 v-model 那么直接处理下 CompilerUtil 中的 model 方法就好了。

只需要在 model 方法在加几行代码即可实现界面驱动数据更新的过程(双向绑定的功能)。

首先说一下思路,监听文本框的输入事件,当文本框的值发生改变时,通过事件对象 e 获取到文本框最新输入的值,将最新的值设置到模型当中这样是不是就可以了。

但是在设置到模型当中有一个注意点:

!> 在 model 方法中,在参数列表中将属性的名称以参数的形式已经传递过来了,但是这个属性的名称有可能是 name, 也有可能是 person.name, 也有可能是一个多级的,这个时候就需要一级一级取,取到最后一级,给最后一级设置值就可以了。

所以我这里就专门在编写一个方法用来设置值,叫做 setValue, 我将 vm, attr, 以及最新的值 value 也穿递过去,然后在 setValue 方法中,先将 attr 以 . 分割成数组,然后通过循环遍历数组,将 vm 的值一级一级取出来,直到取到最后一级,给最后一级设置值就可以了。

好了废话不多说,直接上代码, CompilerUtil 中 setValue:

setValue(vm, attr, newValue) {
attr.split('.').reduce((data, currentAttr, index, arr) => {
if (index === arr.length - 1) {
data[currentAttr] = newValue;
}
return data[currentAttr];
}, vm.$data)
},

然后在 model 方法中, 监听文本框的输入事件在调用 setValue 方法,将 vm, attr, 以及最新的值 value 也穿递过去,代码如下:

// 监听文本框的输入事件
node.addEventListener('input', (e) => {
let newValue = e.target.value;
this.setValue(vm, value, newValue);
});

打开浏览器,输入框输入内容,发现数据已经更新了(不录制 gif 了)好了,这样就实现了界面驱动数据更新的过程。

手撕Vue-界面驱动数据更新的更多相关文章

  1. 手撕公司SSO登陆原理

    Single Sign-on SSO是老生常谈的话题了,但部分同学对SSO可能掌握的也是云里雾里,一知半解.本次手撕公司的SSO登陆原理,试图以一种简单,流畅的形式为你提供 有用的SSO登陆原理. 按 ...

  2. 手写 Vue 系列 之 Vue1.x

    前言 前面我们用 12 篇文章详细讲解了 Vue2 的框架源码.接下来我们就开始手写 Vue 系列,写一个自己的 Vue 框架,用最简单的代码实现 Vue 的核心功能,进一步理解 Vue 核心原理. ...

  3. Netty实现高性能IOT服务器(Groza)之手撕MQTT协议篇上

    前言 诞生及优势 MQTT由Andy Stanford-Clark(IBM)和Arlen Nipper(Eurotech,现为Cirrus Link)于1999年开发,用于监测穿越沙漠的石油管道.目标 ...

  4. 手撕RPC框架

    手撕RPC 使用Netty+Zookeeper+Spring实现简易的RPC框架.阅读本文需要有一些Netty使用基础. 服务信息在网络传输,需要讲服务类进行序列化,服务端使用Spring作为容器.服 ...

  5. NN入门,手把手教你用Numpy手撕NN(一)

    前言 这是一篇包含极少数学推导的NN入门文章 大概从今年4月份起就想着学一学NN,但是无奈平时时间不多,而且空闲时间都拿去做比赛或是看动漫去了,所以一拖再拖,直到这8月份才正式开始NN的学习. 这篇文 ...

  6. NN入门,手把手教你用Numpy手撕NN(2)

    这是一篇包含较少数学推导的NN入门文章 上篇文章中简单介绍了如何手撕一个NN,但其中仍有可以改进的地方,将在这篇文章中进行完善. 误差反向传播 之前的NN计算梯度是利用数值微分法,虽容易实现,但是计算 ...

  7. NN入门,手把手教你用Numpy手撕NN(三)

    NN入门,手把手教你用Numpy手撕NN(3) 这是一篇包含极少数学的CNN入门文章 上篇文章中简单介绍了NN的反向传播,并利用反向传播实现了一个简单的NN,在这篇文章中将介绍一下CNN. CNN C ...

  8. 手撕代码:统计1到n二进制数中1出现的总次数

    题目描述: 互娱手撕代码题. 统计从1到n这n个数的二进制表示中1出现的次数. 思路分析: 思路一:直接的做法是从1遍历到n,对于每个数和1做与操作,之后,对于这个数不断做右移操作,不断和1做与操作, ...

  9. 手撕ES6--Promise

    手撕ES6--Promise:https://www.jianshu.com/p/0925eae38d2c 手写一个Promise,附源码分析:https://blog.csdn.net/weixin ...

  10. 编译原理--05 用C++手撕PL/0

    前言 目录 01 文法和语言.词法分析复习 02 自顶向下.自底向上的LR分析复习 03 语法制导翻译和中间代码生成复习 04 符号表.运行时存储组织和代码优化复习 05 用C++手撕PL/0 在之前 ...

随机推荐

  1. ThinkPHP6.0 链式SQL语句

    ThinkPHP6.0 链式SQL语句 查询单个数据 $user = Db::query('select * from `user`'); $user=Db::table('user')->wh ...

  2. CDMP国际数据治理认证训练营来了(7-8月)

    大家好,我是独孤风,一位曾经的港口煤炭工人,目前在某国企任大数据负责人,公众号大数据流动主理人.在最近的两年的时间里,因为公司的需求,还有大数据的发展趋势所在,我开始学习数据治理的相关知识. 经过一段 ...

  3. linux_mint_21 vim配置:剪贴板支持和输入法自动切换

    一.vim的剪贴板支持 有的vim版本不支持系统剪切板,也就是说在vim编辑器外面复制的内容,不能够粘贴到vim中;在vim中通过yy.d.c复制剪切的内容也不能粘贴在vim编辑器外面. 这实在是有点 ...

  4. Linux 概念:grub2

    GRUB 2是许多发行版的缺省efi模式引导加载程序. grub2 与 grub 的区别 官方手册:https://www.gnu.org/software/grub/manual/grub/html ...

  5. 2023-07-29:给你一个由数字组成的字符串 s,返回 s 中独特子字符串数量。 其中的每一个数字出现的频率都相同。

    2023-07-29:给你一个由数字组成的字符串 s,返回 s 中独特子字符串数量. 其中的每一个数字出现的频率都相同. 答案2023-07-29: 大体步骤如下: 1.初始化变量base为固定值10 ...

  6. 配置oracle DG

    主库名称:prod1 使用asm存储数据 11.2.03 同一机器备库名称:dg 使用file存储数据 11.2.03 配置备库的参数文件cd $ORACLE_HOME/dbsvi initdg.or ...

  7. 助力618-Y的混沌实践之路

    一.写在前面 1.混沌是什么? 混沌工程(Chaos Engineering)的概念由 Netflix 在 2010 年提出,通过主动向系统中引入异常状态,并根据系统在各种压力下的行为表现确定优化策略 ...

  8. CTF比赛中Web的php伪协议类型题小结

    php协议类型 file:// - 访问本地文件系统 http:// - 访问 HTTP(s) 网址 ftp:// - 访问 FTP(s) URLs php:// - 访问各个输入/输出流(I/O s ...

  9. 使用C#的窗体显示与隐藏动画效果方案 - 开源研究系列文章

    今天继续研究C#的WinForm的显示动画效果. 上次我们实现了无边框窗体的显示动画效果(见博文:基于C#的无边框窗体动画效果的完美解决方案 - 开源研究系列文章 ),这次介绍的是未在任务栏托盘中窗体 ...

  10. 【go笔记】使用标准库flag解析命令行参数

    前言 Go语言标准库中提供了一个包flag可以解析命令行参数. 示例代码:文件读取 package main import ( "fmt" "flag" &qu ...