前端开发Web前端之路技术干货

Vue中的MVVM(1)--model -> view的绑

2018-03-01  本文已影响286人  大春春

再次看了上次写的博客关于Vue的MVVM,发现虽然介绍了MVVM的原理,但是感觉还不够详细,现在就再次根据这篇博客写详细一点,来看看new Vue的时候Vue究竟做了些什么事。
我想,以需求作为出发点来理解原理会比较容易,所以这篇博客会以提出需求 -> 解决需求的方式来写。

项目地址,欢迎start

Vue中的MVVM原理介绍

可以先阅读我的这篇博客了解一下关于Vue的MVVM,另外需要记住这一幅图(很重要),这张图就是本篇博客的概括:

image.png

需求提出

首先我们来看Vue最最基础的用法--在id为app的元素上显示出数据msg的内容,平时都是Vue(Vue技术栈的话)在做这件事,那么给我们自己如何实现呢?

需求分析

创建MVVM类

节点编译器(Compiler)

  1. 现在我们已经拿到了data中对应tag的值newVal,并且也有了相对应的节点,那么就执行更新器updater中对应类型的更新方法就可以了,在这里,就是更新相对应节点的文本内容textContent
    image.png
  2. 最后回到compileTextNode函数中,将compile好的文本节点放进假节点中,再将textNode父节点中的文本替换即可
    image.png
  3. 这时候compile文本节点的工作就已经做完了,将处理后的fragment插入到真实节点el中就可以看到效果了:
    image.png
    image.png
  4. 但是此时还没有针对普通节点进行compile,所以如下html无法正常显示,下一步就是对节点进行compile:


    image.png
    image.png

对节点进行compile(进入compileNodeElement函数)

由上图的html可以知道,针对节点进行的compile需要分为两类:

  1. 普通节点的compile,也就是节点内只有文本,例如<div>msg{{msg}}msg{{message.name}}8888888</div>;
  2. 带有指令的的节点,例如:<input type="text" v-model="msg">

总结

该篇博客只对Vue中的初始化渲染原理做了介绍,也只是完成了流程图中Compile的大部分model -> view的绑定,但还未达成双向绑定,因此对数据的修改并不能对视图进行改变,这就是下一篇博客view -> model的绑定所要介绍的:

image.png

Vue中的MVVM--view -> model的绑定

上一篇下一篇

猜你喜欢

热点阅读