-
Notifications
You must be signed in to change notification settings - Fork 84
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
面试题:你能写一个Vue的双向数据绑定吗? #4
Comments
(node.tagName = 'INPUT' || node.tagName == 'TEXTAREA')前半句直接赋值了! |
楼主,你好,请教个问题,为什么v-model的这段代码必须放到立即执行函数里面才生效呢?
并且我试着把这段代码放到addEventListener的外面,像这样,
也不行,如能指点,万分感谢。 |
_obverse应为_observe,if (typeof value === 'object') //如果值还是对象,则遍历处理 应为 则递归处理 |
闭包记录循环的下标,给相应的input委托事件 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
1、原理
Vue的双向数据绑定的原理相信大家也都十分了解了,主要是通过
Object对象的defineProperty属性,重写data的set和get函数来实现的
,这里对原理不做过多描述,主要还是来实现一个实例。为了使代码更加的清晰,这里只会实现最基本的内容,主要实现v-model,v-bind 和v-click三个命令,其他命令也可以自行补充。添加网上的一张图
2、实现
页面结构很简单,如下
包含:
我们最后会通过类似于vue的方式来使用我们的双向数据绑定,结合我们的数据结构添加注释
首先我们需要定义一个myVue构造函数:
为了初始化这个构造函数,给它添加一 个_init属性
接下来实现_obverse函数,对data进行处理,重写data的set和get函数
并改造_init函数
接下来我们写一个指令类Watcher,用来绑定更新函数,实现对DOM元素的更新
更新_init函数以及_obverse函数
那么如何将view与model进行绑定呢?接下来我们定义一个_compile函数,用来解析我们的指令(v-bind,v-model,v-clickde)等,并在这个过程中对view与model进行绑定。
至此,我们已经实现了一个简单vue的双向绑定功能,包括v-bind, v-model, v-click三个指令。效果如下图
附上全部代码,不到150行
如果喜欢请关注我的Github,给个Star吧,我会定期分享一些JS中的知识,^_^
The text was updated successfully, but these errors were encountered: