浅析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 相关文章推荐
JavaScript入门教程(12) js对象化编程
Jan 31 Javascript
js 分栏效果实现代码
Aug 29 Javascript
jQuery解析json数据实例分析
Nov 24 Javascript
深入浅析同源策略和跨域访问
Nov 26 Javascript
基于JavaScript代码实现微信扫一扫下载APP
Dec 30 Javascript
AngularJS ng-app 指令实例详解
Jul 30 Javascript
JS提示:Uncaught SyntaxError: Unexpected token ILLEGAL错误的解决方法
Aug 19 Javascript
使用ionic切换页面卡顿的解决方法
Dec 16 Javascript
react 父组件与子组件之间的值传递的方法
Sep 14 Javascript
vue-i18n结合Element-ui的配置方法
May 20 Javascript
vue中template的三种写法示例
Oct 21 Javascript
vue项目两种方式实现竖向表格的思路分析
Apr 28 Vue.js
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的简单采集数据入库程序【续篇】
2014/07/30 PHP
win7 64位系统 配置php最新版开发环境(php+Apache+mysql)
2014/08/15 PHP
yii分页组件用法实例分析
2015/12/28 PHP
YII2框架中使用yii.js实现的post请求
2017/04/09 PHP
详解PHP的抽象类和抽象方法以及接口总结
2019/03/15 PHP
jquery radio 操作代码
2011/03/16 Javascript
JS修改css样式style浅谈
2013/05/06 Javascript
使用GruntJS构建Web程序之安装篇
2014/06/04 Javascript
在linux中使用包管理器安装node.js
2015/03/13 Javascript
js控制div弹出层实现方法
2015/05/11 Javascript
解决JS组件bootstrap table分页实现过程中遇到的问题
2016/04/21 Javascript
js Canvas实现的日历时钟案例分享
2016/12/25 Javascript
浅谈Vue响应式(数组变异方法)
2018/05/07 Javascript
jQuery使用each遍历循环的方法
2018/09/19 jQuery
jQuery访问json文件中数据的方法示例
2019/01/28 jQuery
浅谈vue加载优化策略
2019/03/19 Javascript
对layui初始化列表的CheckBox属性详解
2019/09/13 Javascript
Python中使用pprint函数进行格式化输出的教程
2015/04/07 Python
为Python的web框架编写MVC配置来使其运行的教程
2015/04/30 Python
python从入门到精通(DAY 1)
2015/12/20 Python
Python3简单实例计算同花的概率代码
2017/12/06 Python
简单的python协同过滤程序实例代码
2018/01/31 Python
python实现飞机大战小游戏
2019/11/08 Python
Python 实现将大图切片成小图,将小图组合成大图的例子
2020/03/14 Python
执行Python程序时模块报错问题
2020/03/26 Python
Pycharm生成可执行文件.exe的实现方法
2020/06/02 Python
Python 3.9的到来到底是意味着什么
2020/10/14 Python
澳大利亚在线高跟鞋商店:Shoe Me
2019/11/19 全球购物
平面设计师的工作职责
2013/11/21 职场文书
手机业务员岗位职责
2013/12/13 职场文书
小学生十佳少年事迹材料
2014/08/20 职场文书
财务整改报告范文
2014/11/05 职场文书
劳动争议和解协议书范本
2014/11/20 职场文书
2014年体育工作总结
2014/11/24 职场文书
幼儿教师辞职信范文
2015/03/02 职场文书
关于食品安全的演讲稿范文(三篇)
2019/10/21 职场文书