浅析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 相关文章推荐
左右悬浮可分组的网站QQ在线客服代码(可谓经典)
Dec 21 Javascript
Javascript实现重力弹跳拖拽运动效果示例
Jun 28 Javascript
JS和jquery获取各种屏幕的宽度和高度的代码
Aug 02 Javascript
JavaScript实现网页截图功能
Oct 16 Javascript
jQuery+CSS3实现树叶飘落特效
Feb 01 Javascript
javascript实现二级级联菜单的简单制作
Nov 19 Javascript
JavaScript操作HTML DOM节点的基础教程
Mar 11 Javascript
轻松玩转BootstrapTable(后端使用SpringMVC+Hibernate)
Sep 06 Javascript
angular4 共享服务在多个组件中数据通信的示例
Mar 30 Javascript
cocos2dx+lua实现橡皮擦功能
Dec 20 Javascript
vue实现简单跑马灯效果
May 25 Javascript
Vue数组响应式操作及高阶函数使用代码详解
Aug 01 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 身份证号验证函数
2009/05/07 PHP
浅谈thinkphp的实例化模型
2015/01/04 PHP
php版微信公众平台之微信网页登陆授权示例
2016/09/23 PHP
PHP生成随机码的思路与方法实例探索
2019/04/11 PHP
php 中self,this的区别和操作方法实例分析
2019/11/04 PHP
一些Javascript的IE和Firefox(火狐)兼容性的问题总结及常用例子
2009/05/21 Javascript
基于Jquery的文字滚动跑马灯插件(一个页面多个滚动区)
2010/07/26 Javascript
js与jquery中获取当前鼠标的x、y坐标位置的代码
2011/05/23 Javascript
yepnope.js 异步加载资源文件
2011/09/08 Javascript
jquery easyui中treegrid用法的简单实例
2014/02/18 Javascript
JS小游戏之极速快跑源码详解
2014/09/25 Javascript
使用JS判断移动端手机横竖屏状态
2018/07/30 Javascript
微信小程序实现留言功能
2018/10/31 Javascript
vsCode安装使用教程和插件安装方法
2020/08/24 Javascript
js中arguments对象的深入理解
2019/05/14 Javascript
使用element-ui的el-menu导航选中后刷新页面保持当前选中状态
2019/07/19 Javascript
vue 解决setTimeOut和setInterval函数无效报错的问题
2020/07/30 Javascript
简单的Python抓taobao图片爬虫
2014/10/26 Python
复习Python中的字符串知识点
2015/04/14 Python
python设置值及NaN值处理方法
2018/07/03 Python
python最小生成树kruskal与prim算法详解
2019/01/17 Python
python基于json文件实现的gearman任务自动重启代码实例
2019/08/13 Python
python实现AdaBoost算法的示例
2020/10/03 Python
用HTML5制作数字时钟的教程
2015/05/11 HTML / CSS
能否解释一下XSS cookie盗窃是什么意思
2012/06/02 面试题
教师求职信范文分享
2013/12/27 职场文书
优秀党员获奖感言
2014/02/18 职场文书
春节联欢晚会主持词
2014/03/24 职场文书
拉歌口号大全
2014/06/13 职场文书
员工生日活动方案
2014/08/24 职场文书
股东出资证明书范例
2014/10/04 职场文书
村干部群众路线整改措施思想汇报
2014/10/12 职场文书
因个人原因离职的辞职信范文
2015/05/12 职场文书
小学英语教师研修感悟
2015/11/18 职场文书
小学语文教师研修感悟
2015/11/18 职场文书
Python Pandas读取Excel日期数据的异常处理方法
2022/02/28 Python