深入解析Vue

我们首先来熟悉一下我们这个文档所学习内容的流程。

先对比一下jQuery和Vue的区别,再讲述Vue的MVVM模型,接着讲解Vue的实现流程。

当然,我是不相信没有对比哪来的伤害,没有伤害哪能让人记忆深入骨髓咧,向来都是被伤害过的人我才会记得你,我要恨你一辈子 ~ ~ 哈哈,这当然是个泛词,我们今天的重点也不是要你真的去恨谁哈,一起来看今日焦点,jQuery 和 Vue的生死之战。

我们来看看jQuery 和 Vue 分别具有什么夺命技能,来来来,看官们看好了。

一、jQuery和Vue的区别

数据和视图分离,解耦(就是都单独分开来)

以数据驱动视图,只关心数据变化,DOM被封装

jQuery:中规中矩的JS门派的后生, 主要的技能就是操作DOM来更改数据,和用DOM来变化数据和视图的更新,

Vue: 独树一派, 拥有响应式,模板引擎解析器,和渲染机制必杀技。

二、Vue的MVVM模型

Vue的MVVM模型讲的是M-> model(数据模型),V-> view(视图、模板),VM-> ViewModel,VM是M和V之间的桥梁,如果没有VM的话,那么Vue就无法实现数据驱动视图进行更新的操作了,

首先我们来介绍一下三者在Vue 里面的表现形式:

三者之间的绑定方式是:

View在ViewModel这个桥梁上利用DOM-listener事件绑定监听事件,将DOM节点上发生的事件传给model,

Model在ViewModel这个桥梁上利用Data-bindings数据绑定事件,将Model数据发生改变的事件传给View,

这样就实现了视图层和数据层双向数据绑定。

下面用一个图来解释一下三者相对应一个Vue 代码中的对应的部分:

三、MVVM框架的三要素

1、响应式 : vue如何监听到data的每个属性变化?

利用Object.defineProperty定义属性,第一个参数对象,第二个属性名

将data里面的属性代理到vm上

利用Object.defineProperty

console.log(obj.name); // 可以监听到
obj.name = 'lisi'; // 可以监听到
使用defineProperty我们就可以监听到数据变化了。其中这个也是 vue 做响应工做核心的方法了。
下面我们来模拟一下
var mv = {}

var data = {
price: 100,
name: 'zhangsan'
} var key, value;
for (key in data) { // 命中闭包。新建一个函数,保证 key 的独立的作用域
(function (key) {
Object.defineProperty(mv, key, {
get: function () {
console.log('get');
return data[key];
},
set: function (newVal) {
console.log('set');
data[key] = newVal
}
})
})(key);
}
 

2、模板解析: vue的模板如何被解析,指令如何处理?

1) vue里面为什么要解析模板?

  1. 这个模板本质是字符串,
  2. 但它和html很像但有很大区别,
  3. 是在这个模板里的html有逻辑,v-for, v-if等等,
  4. 最终必须解析成html来显示,
  5. 模板最终必须转换成 JS 代码, 因为:
    • 有逻辑(v-if v-for),必须用 JS 才能实现( 图灵完备)
    • 转换为 html 渲染页面,必须用 JS 才能实现
    • 因此,模板最重要转换成一个 JS 函数

因为只有JS才能实现将代码转化成html格式渲染到浏览器上

for example:

 <div id="app">
<div>
<input v-model="title">
<button v-on:click="add">submit</button>
</div>
<ul>
<li v-for="item in list">{{item}}</li>
</ul>
</div>

 以上就是一个模板啦

2) render函数

with 用法(vue render有用到,所以说下用法 ,具体开发中建议不使用)

简要说明

with 语句可以方便地用来引用某个特定对象中已有的属性,但是不能用来给对象添加属性。要给对象创建新的属性,必须明确地引用该对象。

render 函数

基础事例

VUE一般使用template来创建HTML,然后在有的时候,我们需要使用javascript来创建html,这时候我们需要使用render函数。
比如如下我想要实现如下html:

我们来尝试使用 render函数重写上面的demo,如下:

  1. 模板中所有信息都包含在了 render 函数中
  2. this 即 vm
  3. price 即 this.price 即 vm.price, 即 data 中的 price
  4. _c 即 this._c 即 vm._c

通过控制台打印,我们就知道了 _c就是一个创建dom 元素的方法, _v 是一个创节点的方法, _s 是 toString 方法。

3、渲染:  vue的模板如何被渲染成html? 以及渲染过程?

四、Vue的实现流程

1、首先模板解析器解析成render函数

2、响应式监听

3、将数据渲染进模板里,

4、data属性变化,触发render

jQuery:“  您能别秀了吗  ”

vue三要素及底层实现机制的更多相关文章

  1. MVVM 和 VUE三要素:响应式、模板引擎、渲染

    MVVM 和 VUE三要素:响应式.模板引擎.渲染:https://blog.csdn.net/weixin_37644989/article/details/94409430

  2. 【腾讯Bugly干货分享】彻底弄懂 Http 缓存机制 - 基于缓存策略三要素分解法

    本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:https://mp.weixin.qq.com/s/qOMO0LIdA47j3RjhbCWUEQ 作者:李 ...

  3. Http协议:彻底弄懂 Http 缓存机制 - 基于缓存策略三要素分解法

    转载:http://mp.weixin.qq.com/s/uWPls0qrqJKHkHfNLmaenQ 导语 Http 缓存机制作为 web 性能优化的重要手段,对从事 Web 开发的小伙伴们来说是必 ...

  4. 2、docker安装:内核要求、docker三要素、安装、helloworld、底层原理

    1.前提说明 1.CentOS Docker 安装 Docker支持以下的CentOS版本: CentOS 7 (64-bit) CentOS 6.5 (64-bit) 或更高的版本 2.前提条件:内 ...

  5. 【Vue高级知识】细谈Vue 中三要素(响应式+模板+render函数)

    [Vue高级知识]细谈Vue 中三要素(响应式+模板+render函数):https://blog.csdn.net/m0_37981569/article/details/93304809

  6. 理解vue与MVVM三要素

    MVVM到底是什么,跟Jquery有什么区别? MVVM理解,跟MVC区别 Model View Controller,一般是用户操作view视图按钮,触发controller内方法,cotrolle ...

  7. Web Service基础——规范及三要素

    1. Java中的Web Service规范 Java 中共有三种WebService 规范,分别是JAX-WS(JAX-RPC).JAX-RS.JAXM&SAAJ(废弃). 1.1 JAX- ...

  8. Docker Note1——架构和三要素

    Docker官方文档: https://docs.docker.com/ 一.docker架构 C/S架构,主要由 client / daemon / containers / images 组成. ...

  9. WebService基础学习(二)—三要素

    一.Java中WebService规范      JAVA 中共有三种WebService 规范,分别是JAX-WS.JAX-RS.JAXM&SAAJ(废弃).   1.JAX-WS规范    ...

随机推荐

  1. 【vim】分割窗口、标签页与Quickfix窗口

    vim支持窗口分割和标签页,合适地使用这两种特性可以使文字编辑工作更愉快. 1. 窗口分割 vim支持窗口的水平分割和垂直分割.以下是常用的操作指令或快捷键. 命令 说明 vim -o <fil ...

  2. python+scrapy 爬取西刺代理ip(一)

    转自:https://www.cnblogs.com/lyc642983907/p/10739577.html 第一步:环境搭建 1.python2 或 python3 2.用pip安装下载scrap ...

  3. 使用git时出现Please make sure you have the correct access rights and the repository exists.问题已解决。

    使用git时,出现Please make sure you have the correct access rights and the repository exists.问题已解决. 今天我在使用 ...

  4. POJ 1051

    #include <iostream> #include <algorithm> #include <string> #define MAXN 27 using n ...

  5. 漫谈NIO(1)之计算机IO实现

    1.前言 此系列将尽可能详细介绍断更博客半年以来个人的一个成长,主要是对Netty的源码的一个解读记录,将从整个计算机宏观IO体系上,到Java的原生NIO例子最后到Netty的源码解读.不求完全掌握 ...

  6. vue制作小程序--mpvue

    mpvue是一个使用 Vue.js 开发小程序的前端框架 http://mpvue.com/ sass的使用 https://segmentfault.com/q/1010000014194954 n ...

  7. Android-NDK处理用户交互事件

    在 android_main(struct android_app* state)函数里面设置输入事件处理函数:state->onInputEvent = &handleInput;// ...

  8. HMM分词实例

    class HMM(object): def __init__(self): import os # 主要是用于存取算法中间结果,不用每次都训练模型 self.model_file = 'model/ ...

  9. 面试题-----ICMP协议简介

    ICMP协议简介 l  ICMP网际控制报文协议,通过它可以知道故障的具体原因和位置. l  由于IP不是为可靠传输服务设计的,ICMP的目的主要是用于在TCP/IP网络中发送出错和控制消息. l  ...

  10. linux xargs 命令详解

    xargs是给命令传递参数的一个过滤器,也是组合多个命令的一个工具.它把一个数据流分割为一些足够小的块,以方便过滤器和命令进行处理.通常情况下,xargs从管道或者stdin中读取数据,但是它也能够从 ...