用纯JS如何做到双向绑定,思路和方法是什么
Admin 2022-06-07 群英技术资讯 1904 次浏览
今天小编跟大家讲解下有关“用纯JS如何做到双向绑定,思路和方法是什么”的内容 ,相信小伙伴们对这个话题应该有所关注吧,小编也收集到了相关资料,希望小伙伴们看了有所帮助。
这是一个普通的html文件,也并没有引入vue.js,是不是在代码中看到有些熟悉的地方?比如:"v-model","v-on:click",还有常用的“双花括号{{}}”赋值语句。
一、创建一个自定义vue js对象,例如上面的wslVue 对象,初始化方法里面需要的参数有:(1)需要挂载到的dom对象id、(2)自定义vue对象的data属性(json对象)、(3)后面添加了一个模拟挂载的方法。(这里有用的就是(1)、(2)参数,(3)参数可以当认为vue对象所有的初始化工作完成后可以进行渲染(挂载)了方法回调)。
二、重写vue属性data json对象的set、get方法,同时可以为vue对象添加data下的所有属性,重写vue生成属性的set、get方法,方法里直接执行data的set、get方法(目的是可以直接用vue对象属性的读写进行dom操作)。
三、解析html,将html里面的标签node、文本node进行特定重组(这里说的特定重组指的就是将vue指令,{{}} 赋值符号转换为正常的html文档进行输出),在解析过程中对每一个需要操作的node进行缓存、绑定逻辑、添加监听事件(比如:input标签输入)。
一、js对象属性的set、get方法。
二、document.createDocumentFragment html片段解析。
三、相关的正则判断进行html代码片段重组。
一、vue对象。
二、观察者类Watcher,保存需要操作的node节点和属性变更需要做的回调方法。
三、管理所有观察者Watcher的管理类Dep,控制数据变更相关Watcher进行回调渲染。
初始化vue对象方法

注释:
1:为vue对象添加data里全部的属性,并重写set、get方法。
2:为vue对象添加方法管理methods对象,当解析html获取到v-on:click方法的时候为标签添加click事件方法体。
3:这里进行解析html,解析时遇到需要处理的node时创建Watcher对象,将相关node及指令保存在Watcher对象里,并把Watcher对象添加到观察者管理类Dep集合里面。
4:初始化完成后进行挂载,渲染完整的html到指定的dom元素上。
Compile类解析需要挂载对应的dom
获取全部的node节点

解析特定指令

标签元素与文本内容判断

这里如果是标签node需要解析里面的v-on和v-model指令
v-model

v-on:click

红线处即为vue对象里methods匹配出来的方法,为当前的node添加点击事件。
这里如果是文本内容node需要解析里面的{{}}指令。

总结:这里会创建很多Watcher对象,对象保存了当前vue对象、node、数据变更回调,并保存在Dep管理类里,以待数据变更时直接执行方法回调进行渲染。
特定指令判断

Watcher及Dep对象


最后放一张思维导图

结尾:到这里基本的思路就讲完了,没有太复杂的逻辑,表达能力有限。希望对大家能有帮助,同时也接受大神们的批评指正,共同进步。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章主要介绍了怎样在CocosCreator中使用物理引擎关节,对物理引擎感兴趣的同学,着重要看一下
在 JavaScript 中,不像 Java 等语言,它没有任何打印或者输出方法的,通常使用如下 4 种方式来输出数据。。下文有实例供大家参考,对大家了解操作过程或相关知识有一定的帮助,而且实用性强,希望这篇文章能帮助大家,下面我们一起来了解看看吧。
目录Axios代理配置及响应拦截处理代理配置响应内容拦截处理Axios的proxy代理配置解析Axios代理配置及响应拦截处理Axios是vue官方推荐的异步处理方案,所以在几个vue的项目里,都用到了,所以这里写一下Axios的代理配置和响应拦截处理代理配置代理主要是为了解决跨域问题,但是现在常规解决跨域的方式,就是
如何给所有的async函数添加try/catch?去阿里面试,三面的时候被问到了这个问题,当时思路虽然正确,可惜表述的不够清晰。后来花了一些时间整理了下思路,下面一起聊聊!
微信小程序实现tab页面切换效果 本文实例为大家分享了微信小程序实现tab页面切换的具体代码,供大家参考,具体内容如下
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008