Vue面试题之vue实现MVVM数据绑定

MVVM

什么是MVVM?

MVVM是Model-View-ViewModel,是把一个系统分为了模型(model)、视图(view)和view-model三个部分。vue是一个典型的MVVM思想,数据驱动视图
通俗一点就是view层不直接和model层通信,他们只能通过view-model层通信。

vue中MVVM的理解

vue是一个MVVM渐进式框架,MVVM是vue的实际模式,在vue框架中数据会自动驱动视图。我们写vue就知道它的单文件组件开发方式。
Model:数据层,仅仅关注数据本身,不关心任何行为。

对应vue组件中的data,props属性。

View:视图层,用户操作页面,当view-model对model更新的时候,会通过数据绑定更新到view。

对应vue组件中的template和style的部分。

ViewModel:业务逻辑层,view需要什么数据,ViewModel就提供什么数据,view有些哪些操作,ViewModel就要响应这些操作;View和ViewModel两种交互方式:双向数据传递(数据属性和data binding)和单向传递操作(命令属性);由于ViewModel的双向数据绑定,当Model发生变化时,ViewModel就会更新,ViewModel变化,Model也会更新。

对应继承Vue类的组件实例

vue在MVVM思想下,view和model没有直接联系,但是view和view-model、model和view-model之间是会交互的。当view视图进行dom操作等使数据发生变化时,可以通过view-model同步到model中,同样的model数据变化也会同步到vue中。

MVVM的数据绑定实现

  • 发布者-订阅模式(backbone.js)
  • 脏值模式(angular/react)
  • 数据劫持(vue)

Vue实现MVVM的双向绑定

vue数据劫持结合发布者-订阅者模式

vue是采用数据劫持结合发布者-订阅者模式的方式,通过Object.defineProperty()来劫持(监听)各个属性的settergetter,在数据(对象)发生变动时发布消息给订阅者,触发相应的监听回调。
因此,要实现MVVM的双向绑定就必须要实现以下几点:

  • 实现一个数据监听器Observer。对数据对象的所有属性进行监听(包括子属性对象的属性),利用Object.defineProperty()对属性都加上settergetter(这样的话,给这个属性的某个值赋值就会触发 setter,那么就能监听数据的变化),如发生变动可拿到最新值并通知订阅者。
  • 实现一个指令解析器Compile。对vue每个元素节点的指令进行扫描和解析,将指令模板的变量都替换成数据,然后初始化渲染页面视图,并将每个指令对应的节点绑定更新函数,添加监听数据的订阅者,一旦数据发生变动,收到通知,调用更新函数进行数据更新。
  • 实现一个订阅者Watcher。Watcher是Observer和Compile之间通信的桥梁,主要任务是订阅Observer中的属性值变化的消息,当属性值发生变化时,触发指令解析器Compile中对应的更新函数,从而更新视图。
  • 实现MVVM入口函数,整合以上三者。

Vue面试题之vue实现MVVM数据绑定

来源:https://www.icode9.com/content-4-823851.html

(0)

相关推荐

  • Vue的MVVM是如何实现的?本文项目详解原理

    相信只要你去面试vue,都会被问到vue的双向数据绑定,你要是就说个mvvm就是视图模型模型视图,只要数据改变视图也会同时更新!那你离被pass就不远了! 视频已录制,地址(www.bilibili. ...

  • Vuejs计数器及MVVM

    4.Vue.js计数器 计数器小案例点击加号加1,点击减号按钮就会减1 运行结果如下: 由于当前计数这四个字是不变的,所以可以直接写在div中 现在基本的样式就写完了,接下来该让按钮有效果了 思路分析 ...

  • 详解 30 道 Vue 面试题(建议收藏)

    来自:掘金,作者:我是你的超级英雄 前言 本文以前端面试官的角度出发,对 Vue 框架中一些重要的特性.框架的原理以问题的形式进行整理汇总,意在帮助作者及读者自测下 Vue 掌握的程度.本文章节结构以 ...

  • 前端面试题整理——VUE双向绑定原理

    VUE2.0和3.0数据双向绑定的原理,并说出其区别. 代码: <!DOCTYPE html> <html lang="en"> <head> ...

  • 前端面试 vue 部分 (1)——谈谈你对 MVVM 的理解

    [答案] MVVM 由 Model.View.ViewModel 三部分构成 Model 代表数据模型,也可以在 Model 中定义数据修改和业务逻辑: View 代表 UI 组件,它负责将数据模型转 ...

  • vue-admin-beautiful、Vue Admin Pro、Vue Admin Plus

    vue-admin-beautiful 是一款基于 vue+element-ui 的绝佳的中后台前端开发管理框架(基于 vue/cli 4 最新版,同时支持电脑,手机,平板). Admin Pro拥有 ...

  • 前端Vue(五)——Vue生命周期

    Vue生命周期 一.介绍 官方术语:生命周期钩子====>也是:生命周期函数 生命周期图网址:https://cn.vuejs.org/images/lifecycle.png Vue生命周期分 ...

  • VUE使用QRcode或者vue

    When I see you (当我看到你) looking back at me (回头看着我) watching these eyes still (我们一直对视) through your fi ...

  • (48条消息) VUE中实现打印vue

    安装: npm install vue-print-nb --save main.js: import Print from 'vue-print-nb' Vue.use(Print); 使用方法: ...

  • Vue基础(十):Vue路由(二)

    Vue基础(十):Vue路由(二)

  • Vue基础(九):Vue路由(一)

    Vue基础(九):Vue路由(一)