浅析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 相关文章推荐
Jquery Select操作方法集合脚本之家特别版
May 17 Javascript
原生js写的放大镜效果
Aug 22 Javascript
邮箱下拉自动填充选择示例代码附图
Apr 03 Javascript
jQuery选择器querySelector的使用指南
Jan 23 Javascript
js如何判断输入字符串长度
Dec 16 Javascript
Bootstrap Search Suggest使用例子
Dec 21 Javascript
vue中的非父子间的通讯问题简单的实例代码
Jul 19 Javascript
详解Vue单元测试Karma+Mocha学习笔记
Jan 31 Javascript
JavaScript中.min.js和.js文件的区别讲解
Feb 13 Javascript
修改layui的后台模板的左侧导航栏可以伸缩的方法
Sep 10 Javascript
基于ajax实现上传图片代码示例解析
Dec 03 Javascript
canvas多重阴影发光效果实现
Apr 20 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
第4章 数据处理-php字符串的处理-郑阿奇(续)
2011/07/04 PHP
关于zend studio 出现乱码问题的总结
2013/06/23 PHP
destoon供应信息title调用出公司名称的方法
2014/08/22 PHP
WordPress中用于更新伪静态规则的PHP代码实例讲解
2015/12/18 PHP
PHP基于rabbitmq操作类的生产者和消费者功能示例
2018/06/16 PHP
js中关于new Object时传参的一些细节分析
2011/03/13 Javascript
js调用后台servlet方法实例
2013/06/09 Javascript
JavaScript中的some()方法使用详解
2015/06/09 Javascript
Javascript 实现微信分享(QQ、朋友圈、分享给朋友)
2016/10/21 Javascript
jQuery基于cookie实现换肤功能实例
2017/10/14 jQuery
React Native时间转换格式工具类分享
2017/10/24 Javascript
利用Angular2 + Ionic3开发IOS应用实例教程
2018/01/15 Javascript
Vue中使用ElementUI使用第三方图标库iconfont的示例
2018/10/11 Javascript
基于Vue实现电商SKU组合算法问题
2019/05/29 Javascript
vue实践---vue不依赖外部资源实现简单多语操作
2020/09/21 Javascript
python fabric实现远程操作和部署示例
2014/03/25 Python
Python编写一个闹钟功能
2017/07/11 Python
使用Python实现windows下的抓包与解析
2018/01/15 Python
python3 发送任意文件邮件的实例
2018/01/23 Python
python导入坐标点的具体操作
2019/05/10 Python
python的pygal模块绘制反正切函数图像方法
2019/07/16 Python
pandas实现excel中的数据透视表和Vlookup函数功能代码
2020/02/14 Python
澳大利亚女性快速时尚零售商:Ally Fashion
2018/04/25 全球购物
CHARLES & KEITH加拿大官网:新加坡时尚品牌
2020/03/26 全球购物
清洁工表扬信
2014/01/08 职场文书
计算机专业职业生涯规划范文
2014/01/19 职场文书
人力资源部经理助理岗位职责
2014/03/04 职场文书
家长对老师的感言
2014/03/11 职场文书
学校法制宣传月活动总结
2014/07/03 职场文书
四风问题查摆材料
2014/08/25 职场文书
2014年城市管理工作总结
2014/12/02 职场文书
学校党风廉政建设调研报告
2015/01/01 职场文书
我们的节日元宵节活动总结
2015/02/06 职场文书
幼儿园奖惩制度范本
2015/08/05 职场文书
Ruby处理CSV数据方法详解
2022/04/18 Ruby
微信小程序调用python模型
2022/04/21 Python