浅析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 Math ceil()、floor()、round()三个函数的区别
Mar 09 Javascript
基于Jquery与WebMethod投票功能实现代码
Jan 19 Javascript
JavaScript基础篇之变量作用域、传值、传址的简单介绍与实例
Jun 29 Javascript
js拆分字符串并将分割的数据放到数组中的方法
May 06 Javascript
Javascript编写俄罗斯方块思路及实例
Jul 07 Javascript
跟我学习javascript解决异步编程异常方案
Nov 23 Javascript
基于jQuery的checkbox全选问题分析
Nov 18 Javascript
jQuery Form表单取值的方法
Jan 11 Javascript
Vue.js实战之Vuex的入门教程
Apr 01 Javascript
基于js中this和event 的区别(详解)
Oct 24 Javascript
一百行JS代码实现一个校验工具
Apr 30 Javascript
详解vuex的简单todolist例子
Jul 14 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
分页显示Oracle数据库记录的类之一
2006/10/09 PHP
php学习 字符串课件
2008/06/15 PHP
PHP的数组中提高元素查找与元素去重的效率的技巧解析
2016/03/03 PHP
php unicode编码和字符串互转的方法
2020/08/12 PHP
jQuery UI的Dialog无法提交问题的解决方法
2011/01/11 Javascript
js/jquery去掉空格,回车,换行示例代码
2013/11/05 Javascript
JavaScript中的console.log()函数详细介绍
2014/12/29 Javascript
PHP+mysql+Highcharts生成饼状图
2015/05/04 Javascript
在easyUI开发中,出现jquery.easyui.min.js函数库问题的解决办法
2015/09/11 Javascript
html、css和jquery相结合实现简单的进度条效果实例代码
2016/10/24 Javascript
JS类的定义与使用方法深入探索
2016/11/26 Javascript
Angular中的$watch、$watchGroup、$watchCollection
2017/06/25 Javascript
使用JavaScript进行表单校验功能
2017/08/01 Javascript
shiro授权的实现原理
2017/09/21 Javascript
vue+iview+less 实现换肤功能
2018/08/17 Javascript
解决vue中的无限循环问题
2020/07/27 Javascript
Python编写检测数据库SA用户的方法
2014/07/11 Python
Cpy和Python的效率对比
2015/03/20 Python
Python中字符串的常见操作技巧总结
2016/07/28 Python
Python变量赋值的秘密分享
2018/04/03 Python
Python 中Django安装和使用教程详解
2019/07/03 Python
pandas 缺失值与空值处理的实现方法
2019/10/12 Python
使用TensorFlow直接获取处理MNIST数据方式
2020/02/10 Python
使用keras2.0 将Merge层改为函数式
2020/05/23 Python
基于Python绘制个人足迹地图
2020/06/01 Python
让IE可以变相支持CSS3选择器
2010/01/21 HTML / CSS
全球知名提供各类营养保健品的零售商:Vitamin Shoppe
2016/10/09 全球购物
测绘工程系学生的自我评价
2013/11/30 职场文书
计算机应届毕业生自荐信范文
2014/02/23 职场文书
企业授权委托书范本
2014/04/02 职场文书
电子商务专业毕业生自荐书
2014/06/22 职场文书
推普周活动总结
2014/08/28 职场文书
秋季运动会开幕词
2015/01/28 职场文书
2016中秋节晚会开场白
2015/11/26 职场文书
MySQL中order by的使用详情
2021/11/17 MySQL
PHP RabbitMQ消息列队
2022/05/11 PHP