浅析js中mvvm模式实现的原理


Posted in Javascript onOctober 06, 2018

以Vue.js框架为例子,使用的mvvm模式

浅析js中mvvm模式实现的原理

view指的是页面的html和css构成的视图。

model指的是从后端取到的数据模型

viewmodel 指的是前端开发人员组织生成和维护的视图数据层。这一层包含的是视图行为和数据。

视图行为指的是如页面加载进来时请求什么,将指定的数据放到指定的元素上,点击某个元素触发某事件。当viewmodel处理好后则会将对应的数据展现到view层。

MVVM模式的优点在于当view和viewmodel的双向绑定,当数据改变后不需要改修改DOM结构。

例如原生js实现一个input的值绑定另一个div的文本,首先需要监听input事件,每次改变触发一次div节点的文本子节点进行修改。使用了MVVM模式则可以自动检测到数据的改变从而修改div文本

mvvm的实现原理:利用Object.defineProperty(),该方法有get、set两个属性方法,从而获取对象属性的值,给对象属性重新赋值

//定义一个对象

let obj = {}

Object.defineProperty(obj,'txt'{

  //obj.txt属性赋值方法,同时为input、p文本赋同一个值

  set(val){

    document.getElementById('input').value = val

    document.getElementById('output').innerHTML = val

  },

  //获取txt属性的方法

  get(){

    return obj;

  }

})

//监听事件 触发的时候会给obj.txt重新赋值,从而实现双向绑定

 document.addEventListener('keyup',(e)=>{

  obj.txt = e.target.value;

 })
Javascript 相关文章推荐
IE和Mozilla的兼容性汇总event
Aug 12 Javascript
JavaScript使用过程中需要注意的地方和一些基本语法
Aug 26 Javascript
jQuery bxCarousel实现图片滚动切换效果示例代码
May 15 Javascript
解决JS中乘法的浮点错误的方法
Jan 03 Javascript
用IE重起计算机或者关机的示例代码
Mar 10 Javascript
AngularJS 遇到的小坑与技巧小结
Jun 07 Javascript
Angularjs CURD 详解及实例代码
Sep 14 Javascript
js 只比较时间大小的实例
Oct 26 Javascript
Node之简单的前后端交互(实例讲解)
Nov 14 Javascript
Centos7 安装Node.js10以上版本的方法步骤
Oct 15 Javascript
javascript 关于赋值、浅拷贝、深拷贝的个人理解
Nov 01 Javascript
vue2.x数组劫持原理的实现
Apr 19 Javascript
js for终止循环 跳出多层循环
Oct 04 #Javascript
iView-admin 动态路由问题的解决方法
Oct 03 #Javascript
Angular resolve基础用法详解
Oct 03 #Javascript
解决angularjs service中依赖注入$scope报错的问题
Oct 02 #Javascript
angular.js实现列表orderby排序的方法
Oct 02 #Javascript
Angularjs实现数组随机排序的方法
Oct 02 #Javascript
解决angular双向绑定无效果,ng-model不能正常显示的问题
Oct 02 #Javascript
You might like
PHP ajax 分页类代码
2008/11/13 PHP
wordpress自定义url参数实现路由功能的代码示例
2013/11/28 PHP
PHP多线程类及用法实例
2014/12/03 PHP
thinkphp3.x中session方法的用法分析
2016/05/20 PHP
Thinkphp实现短信验证注册功能
2016/10/18 PHP
PHP实现对数字分隔加千分号的方法
2019/03/18 PHP
extjs fckeditor集成代码
2009/05/10 Javascript
下载站控制介绍字数显示的脚本 显示全部 隐藏介绍等功能
2009/09/19 Javascript
用jQuery打造TabPanel效果代码
2010/05/22 Javascript
jquery offset函数应用实例
2012/11/14 Javascript
可自己添加html的伪弹出框实现代码
2013/09/08 Javascript
jQuery的:parent选择器定义和用法
2014/07/01 Javascript
ECMAScript 5严格模式(Strict Mode)介绍
2015/03/02 Javascript
jQuery晃动层特效实现方法
2015/03/09 Javascript
jquery表单验证需要做些什么
2015/11/17 Javascript
jQuery移动页面开发中的触摸事件与虚拟鼠标事件简介
2015/12/03 Javascript
总结jQuery插件开发中的一些要点
2016/05/16 Javascript
JavaScript实现垂直滚动条效果
2017/01/18 Javascript
js实现简易计算器功能
2019/10/18 Javascript
解决$store.getters调用不执行的问题
2019/11/08 Javascript
webgl实现物体描边效果的方法介绍
2019/11/27 Javascript
使用vue实现HTML页面生成图片的方法
2020/03/12 Javascript
[01:16:13]DOTA2-DPC中国联赛 正赛 SAG vs Dragon BO3 第一场 2月22日
2021/03/11 DOTA
Python读取网页内容的方法
2015/07/30 Python
python中requests和https使用简单示例
2018/01/18 Python
磁盘垃圾文件清理器python代码实现
2020/08/24 Python
详解用TensorFlow实现逻辑回归算法
2018/05/02 Python
Tensorflow中批量读取数据的案列分析及TFRecord文件的打包与读取
2020/06/30 Python
使用BeautifulSoup4解析XML的方法小结
2020/12/07 Python
家佳咖啡店创业计划书
2013/12/27 职场文书
幼儿园教研活动方案
2014/01/19 职场文书
公民代理授权委托书
2014/09/24 职场文书
项目验收申请报告
2015/05/15 职场文书
2016暑期社会实践新闻稿
2015/11/25 职场文书
再谈python_tkinter弹出对话框创建
2022/03/20 Python
世界无敌的ICOM IC-R9500宽频接收机
2022/03/25 无线电