浅析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五图轮播切换实用版
Aug 17 Javascript
js控制table合并具体实现
Feb 20 Javascript
jQuery.holdReady()使用方法
May 20 Javascript
使用js复制链接中的部分文字的方法
Jul 30 Javascript
jquery插件jquery.beforeafter.js实现左右拖拽分隔条对比图片的方法
Aug 07 Javascript
jquery如何获取元素的滚动条高度等实现代码
Oct 19 Javascript
javascript中的altKey 和 Event属性大全
Nov 06 Javascript
js 点击a标签 获取a的自定义属性方法
Nov 21 Javascript
Angular 4依赖注入学习教程之FactoryProvider配置依赖对象(五)
Jun 04 Javascript
Angular实现的table表格排序功能完整示例
Dec 22 Javascript
使用vue-cli3 创建vue项目并配置VS Code 自动代码格式化 vue语法高亮问题
May 14 Javascript
解决layui数据表格table的横向滚动条显示问题
Sep 04 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发送邮件类代码附详细说明
2008/07/10 PHP
Drupal 添加模块出现莫名其妙的错误的解决方法(往往出现在模块较多时)
2011/04/18 PHP
PHP设计模式 注册表模式(多个类的注册)
2012/02/05 PHP
shell脚本作为保证PHP脚本不挂掉的守护进程实例分享
2013/07/15 PHP
php从csv文件读取数据并输出到网页的方法
2015/03/14 PHP
ThinkPHP5.1框架页面跳转及修改跳转页面模版示例
2019/05/06 PHP
jquery删除ID为sNews的tr元素的内容
2014/04/10 Javascript
jQuery针对各类元素操作基础教程
2014/08/29 Javascript
浅谈$('div a') 与$('div>a')的区别
2016/07/18 Javascript
Vue.js 2.0中select级联下拉框实例
2017/03/06 Javascript
Angular2 组件交互实例详解
2017/08/24 Javascript
js防刷新的倒计时代码 js倒计时代码
2017/09/06 Javascript
vue2.0 自定义 饼状图 (Echarts)组件的方法
2018/03/02 Javascript
Vue全局loading及错误提示的思路与实现
2019/08/09 Javascript
Vue项目打包压缩的实现(让页面更快响应)
2020/03/10 Javascript
JS中FormData类实现文件上传
2020/03/27 Javascript
JavaScript布尔运算符原理使用解析
2020/05/06 Javascript
Python写的Socks5协议代理服务器
2014/08/06 Python
运动检测ViBe算法python实现代码
2018/01/09 Python
Python实现Kmeans聚类算法
2020/06/10 Python
python numpy格式化打印的实例
2018/05/14 Python
python读取txt文件,去掉空格计算每行长度的方法
2018/12/20 Python
Win10系统下安装labelme及json文件批量转化方法
2019/07/30 Python
基于python的BP神经网络及异或实现过程解析
2019/09/30 Python
CSS改变网页中鼠标选中文字背景颜色例子
2014/04/23 HTML / CSS
纽约香氛品牌:NEST Fragrance
2018/10/15 全球购物
美国价格实惠的在线眼镜网站:Zeelool
2020/12/25 全球购物
中国央视网签名寄语
2014/01/18 职场文书
酒店总经理助理职责
2014/02/12 职场文书
警示教育活动总结
2014/05/05 职场文书
新闻发布会活动策划方案
2014/09/15 职场文书
生产操作工岗位职责
2014/09/16 职场文书
乡镇群众路线教育实践活动整改措施
2014/10/04 职场文书
家庭困难证明
2014/10/12 职场文书
详解JSON.parse和JSON.stringify用法
2022/02/18 Javascript
Tomcat配置访问日志和线程数
2022/05/06 Servers