浅析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 相关文章推荐
新浪的图片新闻效果
Jan 13 Javascript
jquery模拟SELECT下拉框取值效果
Oct 23 Javascript
jquery 合并内容相同的单元格(示例代码)
Dec 13 Javascript
控制文字内容的显示与隐藏示例
Jun 11 Javascript
JavaScript获取页面上被选中文字的方法技巧
Mar 13 Javascript
JavaScript模块规范之AMD规范和CMD规范
Oct 27 Javascript
javascript实现拖放效果
Dec 16 Javascript
将鼠标焦点定位到文本框最后(代码分享)
Jan 11 Javascript
JavaScript实现离开页面前提示功能【附jQuery实现方法】
Sep 26 jQuery
vue缓存的keepalive页面刷新数据的方法
Apr 23 Javascript
vue router 通过路由来实现切换头部标题功能
Apr 24 Javascript
js实现图片无缝循环轮播
Oct 28 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
比特率,大家看看这个就不用收音机音质去比MP3音质了
2021/03/01 无线电
php 常用算法和时间复杂度
2013/07/01 PHP
Symfony2创建页面实例详解
2016/03/18 PHP
php 开发中加密的几种方法总结
2017/03/22 PHP
科讯商业版中用到的ajax空间与分页函数
2007/09/02 Javascript
JavaScript DOM 添加事件
2009/02/14 Javascript
JS高级笔记
2011/07/13 Javascript
document.getElementById介绍
2011/09/13 Javascript
日期处理的js库(迷你版)--自建js库总结
2011/11/21 Javascript
精心挑选的12款优秀的基于jQuery的手风琴效果插件和教程
2012/08/22 Javascript
当鼠标移动到图片上时跟随鼠标显示放大的图片效果
2013/06/06 Javascript
JavaScript实现N皇后问题算法谜题解答
2014/12/29 Javascript
再谈JavaScript线程
2015/07/10 Javascript
基于javascript实现九九乘法表
2016/03/27 Javascript
学习使用bootstrap基本控件(table、form、button)
2016/04/12 Javascript
JavaScript观察者模式(publish/subscribe)原理与实现方法
2017/03/30 Javascript
jquery一键控制checkbox全选、反选或全不选
2017/10/16 jQuery
BootStrap自定义popover,点击区域隐藏功能的实现
2018/01/23 Javascript
Vue2.X 通过AJAX动态更新数据
2018/07/17 Javascript
require.js 加载过程与使用方法介绍
2018/10/30 Javascript
JS桶排序的简单理解与实现方法示例
2019/11/25 Javascript
JS中FormData类实现文件上传
2020/03/27 Javascript
微信小程序onShareTimeline()实现分享朋友圈
2021/01/07 Javascript
python使用插值法画出平滑曲线
2018/12/15 Python
python调用外部程序的实操步骤
2019/03/04 Python
在pandas中遍历DataFrame行的实现方法
2019/10/23 Python
简单介绍一下pyinstaller打包以及安全性的实现
2020/06/02 Python
利用CSS3实现进度条的两种姿势详解
2017/03/21 HTML / CSS
通往英国高街的商店橱窗:Down Your High Street
2020/07/19 全球购物
日本AOKI官方商城:AOKI西装
2020/06/11 全球购物
计算机大学生的自我评价
2013/10/15 职场文书
中专毕业自我鉴定
2013/10/16 职场文书
升职自荐信
2013/11/28 职场文书
商务助理求职信范文
2014/04/20 职场文书
2015银行年终工作总结范文
2015/05/26 职场文书
JS中如何优雅的使用async await详解
2021/10/05 Javascript