MVVM 和 VUE 详解

作者: 简单tao的简单 | 来源:发表于2019-08-07 17:10 被阅读0次

说一下使用Jquery和使用框架的区别

  • 数据和视图的分离,解耦(开放封闭原则)
  • 以数据驱动视图,只关心数据变化,DOM操作被封装

说一下对MVVM的理解

  • Model(模型、数据) View(DOM、视图、模板) ViewModel ViewModel是链接Model和View的一个桥
  • view可以通过事件绑定的方式影响model
  • model可以通过数据绑定影响view

VUE、MVVM框架的三要素

  • 响应式:vue如何监听到data的每个属性变化?
  • 模板引擎:vue的模板如何被解析,指令如何处理?
  • 渲染:vue的模板如何被渲染成html?以及渲染过程

vue中如何实现响应式

  • 什么是响应式
    • 修改data属性后,vue立刻监听到
    • data属性被代理到vm上
  • Object.defineProperty(obj, prop, desc) 实现响应式的核心函数

Object.defineProperty(obj, prop, desc)的作用就是直接在一个对象上定义一个新属性,或者修改一个已经存在的属性
模板中没有的数据,不会走get监听,所以也不会走set监听,Object.defineProperty的原则是走get才会走set,防止无用的数据重复渲染。

  • 问题解答
    • 关键是理解Object.defineProperty
    • 将data的属性代理到vm上
var vm = {}
var data = {
    name: 'zhangsan',
    age: 20
}

var key, value
for (key in data) {
    (function (key) {
        Object.defineProperty(vm, key, {
            get: function () {
                console.log('get', data[key]) // 监听
                return data[key]
            },
            set: function (newVal) {
                console.log('set', newVal) // 监听
                data[key] = newVal
            }
        })
    })(key)
}

vue中如何解析模板

  • 模板是什么?
    • 本质:字符串
    • 有逻辑,如v-if v-for等
    • 与html很像,但有很大区别
    • 最终还要转化成html来显示
    • 模板最终要装换成js代码(render函数)
//模板
    <div id="app">
        <p>{{price}}</p>
    </div>
//render函数
        function render() {
            with(this) {  // this 就是 vm
                return _c(
                    'div',
                    {
                        attrs: {'id': 'app'}
                    },
                    [
                        _c('p', [_v(_s(price))])
                    ]
                )
            }
        }
//在vue源码中搜索code.render,然后alert(code.render)可以看render函数

问题解答

  • h函数生成vdom
  • patch函数渲染成dom

vue的整个实现流程

  1. 解析模板成render函数
  2. 响应式开始监听
  3. 首次渲染,显示页面,且绑定依赖
  4. data属性变化,触发rerender

相关文章

  • MVVM 和 VUE 详解

    说一下使用Jquery和使用框架的区别 数据和视图的分离,解耦(开放封闭原则) 以数据驱动视图,只关心数据变化,D...

  • 架构模式

    MVC和MVVM详解

  • 前端面试资料收集

    vue相关知识 前端面试题+前端学习+面试指南 剖析Vue原理&实现双向绑定MVVM 详解 JavaScript的...

  • Vue之MVVM模式和第一个Vue程序

    一、MVVM模式和第一个Vue程序 目录:MVVM模式、第一个Vue程序 1.MVVM模式 1)什么是MVVM?M...

  • vue源码分析

    和vue类似的个人mvvm项目https://github.com/DMQ/mvvm

  • iOS-19 MVC和MVVM

    1 iOS MVC、MVVM、MVP详解 - 简书 2 浅谈 MVC、MVP 和 MVVM 架构模式 - Coco...

  • Vue 基础用法

    Vue 简介 MVVM 框架 Model-View-ViewModelimage.png Vue 使用 MVVM ...

  • vue 篇章一

    参考文献: 官网地址Vue事件修饰符详解mvvm子路由路由器起步props 与 打data区别ajaxgithub...

  • 03Vue源码实现

    Vue 源码实现 理解 Vue 的设计思想 MVVM 模式 MVVM 框架的三要素:数据响应式、模板引擎和渲染 数...

  • Vue题目

    Vue 1、vue解决了什么问题 解决了数据和控件双向绑定问题 2、MVVM的理解 MVVM是Model-View...

网友评论

    本文标题:MVVM 和 VUE 详解

    本文链接:https://www.haomeiwen.com/subject/fhzndctx.html