浅析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技巧之不要用for in语句对数组进行遍历
Oct 20 Javascript
ASP中Sub和Function的区别说明
Aug 30 Javascript
Javascript 面向对象编程(一) 封装
Aug 28 Javascript
jquery 漂亮的删除确认和提交无刷新删除示例
Nov 13 Javascript
Google Dart编程语法和基本类型学习教程
Nov 27 Javascript
JS获取各种宽度、高度的简单介绍
Dec 19 Javascript
jqPlot jQuery绘图插件的使用
Jun 18 Javascript
javascript 单例模式详解及简单实例
Feb 14 Javascript
Vue学习之路之登录注册实例代码
Jul 06 Javascript
JavaScript正则表达式的贪婪匹配和非贪婪匹配
Sep 05 Javascript
Vue实现将数据库中带html标签的内容输出(原始HTML(Raw HTML))
Oct 28 Javascript
微信小程序接入腾讯云验证码的方法步骤
Jan 07 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中查询SQL Server或Sybase时TEXT字段被截断的解决方法
2009/03/10 PHP
PHP gbk环境下json_dencode传送来的汉字
2012/11/13 PHP
PHP调用C#开发的dll类库方法
2014/07/28 PHP
thinkPHP3.1验证码的简单实现方法
2016/04/22 PHP
PHP排序算法之希尔排序(Shell Sort)实例分析
2018/04/20 PHP
JS读取XML文件示例代码
2013/11/15 Javascript
select多选 multiple的使用示例
2014/06/16 Javascript
JavaScript中的对象的extensible属性介绍
2014/12/30 Javascript
深入理解Angular2 模板语法
2016/08/07 Javascript
ion content 滚动到底部会遮住一部分视图的快速解决方法
2016/09/06 Javascript
jQuery绑定事件的四种方式介绍
2016/10/31 Javascript
ie下js不执行的几种可能
2017/02/28 Javascript
ES6正则的扩展实例详解
2017/04/25 Javascript
ionic2懒加载配置详解
2017/09/01 Javascript
javascript将json格式数组下载为excel表格的方法
2017/12/22 Javascript
使用python实现链表操作
2018/01/26 Python
python 日期操作类代码
2018/05/05 Python
Python闭包思想与用法浅析
2018/12/27 Python
python对列进行平移变换的方法(shift)
2019/01/10 Python
使用CodeMirror实现Python3在线编辑器的示例代码
2019/01/14 Python
如何在Django中添加没有微秒的 DateTimeField 属性详解
2019/01/30 Python
通过Python编写一个简单登录功能过程解析
2019/09/04 Python
pip 安装库比较慢的解决方法(国内镜像)
2019/10/06 Python
django orm模块中的 is_delete用法
2020/05/20 Python
M1芯片安装python3.9.1的实现
2021/02/02 Python
详解CSS3新增的背景属性
2019/12/25 HTML / CSS
摩顿布朗英国官方网上商店:奢华沐浴、身体和头发护理
2016/10/29 全球购物
super关键字的用法
2012/04/10 面试题
Ajax请求总共有多少种Callback
2016/07/17 面试题
补充协议书范本
2014/04/23 职场文书
超市客服工作职责
2014/06/11 职场文书
有子女的离婚协议书怎么写(范本)
2014/09/29 职场文书
领导班子三严三实心得体会
2014/10/13 职场文书
舌尖上的中国观后感
2015/06/02 职场文书
《平行四边形的面积》教学反思
2016/02/16 职场文书
使用python绘制横竖条形图
2022/04/21 Python