首页 > 其他分享 >MVVM开发模式+双向数据绑定及扩展

MVVM开发模式+双向数据绑定及扩展

时间:2023-06-13 15:00:35浏览次数:48  
标签:订阅 劫持 MVVM 数据源 绑定 视图 模式 双向 数据

一、MVVM开发模式

(1)前端的视图层概念=》由MVC演化

(2)  M:model【模型层】:渲染页面所以来的数据源(通过ajax从服务端获取的数据)

      V:view【视图层】:将数据模型转换成UI展示给用户

      VM:【视图模型层】:当监听到DOM变化时,会自动地更新数据源里面所依赖的数据

              (修改了model数据源数据,VM自动渲染页面)

  • Model 和 View 并无直接关联,而是通过 ViewModel 来进行联系的,实现了 Model 和 View 的数据自动同步
  • Model 和 ViewModel 之间有着双向数据绑定的联系

 

 

二、双向数据绑定原理

【数据和视图相互驱动更新,是相互影响的关系】

1、通过 数据劫持 结合 发布订阅模式的方式来实现的

2、通过Object.defineProperty()来劫持各个属性的settergetter

3、数据变动则发布消息给订阅者,触发相应的监听回调。

 

三、Vue实现数据响应式的基本原理

【数据驱动视图】

(1)vue的数据响应式:当数据发生变化时,通知改变的代码

(2)基本原理:

  • 采用数据劫持结合发布者—订阅者模式的方式来实现数据的响应式

  • 通过Object.defineProperty()对数据进行拦截,把这些属性全部转换成getter/setter,

  • get()方法可以读取数据、收集依赖,set()方法可以改写数据

  • 数据变动进行数据比较,变化则会通知订阅者,触发监听回调,更新视图

 

四、发布订阅模式

此模式分为 发布者 和 订阅者 两个概念,

发布者收集订阅者的需求

然后在某个时刻告知订阅者

 

五、使用 Object.defineProperty() 来进行数据劫持有什么缺点?

(1)在对一些属性进行操作的时候, 使用这种方法无法进行拦截。

【无法监控到数组下标的变化,通过数组下标修改元素,无法实时响应】

对于数组而言,大部分操作都是拦截不到的,只是 Vue 内部通过重写函数的方式解决了这个问题。

(2)兼容性的问题,因为 Proxy 是 ES6 的语法,无法使用Proxy对对象进行代理,实现数据劫持。

标签:订阅,劫持,MVVM,数据源,绑定,视图,模式,双向,数据
From: https://www.cnblogs.com/le-fang/p/17477521.html

相关文章

  • 6. Vue.js 表单输入绑定 #yyds干货盘点#【yyds干货盘点】
    学习目录:Vue.js简介Vue.js实例与数据绑定Vue.js计算属性和侦听器Vue.js条件渲染和列表渲染Vue.js事件处理Vue.js表单输入绑定Vue.js组件基础Vue.js组件通信Vue.js插槽Vue.js动态组件和异步组件Vue.js自定义指令Vue.js过渡和动画Vue.js混入Vue.js自定义事件和v-model......
  • Avalonia如何快速使用Prism进行MVVM开发,实现Prism区域导航功能
    新建ViewA和ViewB以及他的ViewModel 创建View和WPF开发是一样的,创建UserControl,注意avalonia里面需要指定DataType的类型。 创建ViewModel,这里面和开发WPF是一模一样的 到App里面取注册Region  到Window里面取写好界面,创建一个Region用于导航 MainWindowVie......
  • Avalonia如何快速使用Prism进行MVVM开发
    Avalonia版本:RC1.1Prism.Avalonia版本:8.1.97.11000-rc1.1创建Avalonia模板  如果没有RC1.1模板的取看下官网文档,更新一下模板的版本GettingStarted-AvaloniaUI 进入App.axaml.cs文件修改,将App的继承由Application改为PrismApplication,实现prism里面的抽象 到......
  • WPF入门教程系列二十八 ——DataGrid使用示例MVVM模式(5)
    WPF入门教程系列目录WPF入门教程系列二——Application介绍WPF入门教程系列三——Application介绍(续)WPF入门教程系列四——Dispatcher介绍WPF入门教程系列五——Window介绍WPF入门教程系列十一——依赖属性(一)WPF入门教程系列十五——WPF中的数据绑定(一)  添加Cl......
  • 45 最佳实践-性能最佳实践-kworker隔离绑定
    45最佳实践-性能最佳实践-kworker隔离绑定45.1概述kworker是Linux内核实现的per-CPU线程,用来执行系统中的workqueue请求。kworker线程会和vCPU线程争抢物理核资源,导致虚拟化业务性能抖动。为了使虚拟机能够稳定的运行,减少kworker线程对虚拟机的干扰,可以将主机上的kworker线程绑......
  • (2023.6.10)线程绑定到指定核上
    pthread_setaffinity_np与sched_setaffinity的区别:sched_setaffinity可在进程的线程中去修改亲和性写在启动脚本中是使用pthread_setaffinity_np、sched_setaffinity、还是tasklet?(https://www.cnblogs.com/x_wukong/p/5924298.html)c语言如何调用到系统命令reboot? 同时在......
  • 13.双向链表的算法实现
      单链表中每个结点除了存储自身数据之后,还存储了下一个结点的地址,因此可以轻松访问下一个结点,以及后面的后继结点,但是如果想访问前面的结点就不行了,再也回不去了。  例如删除结点p时,要先找到它的前一个结点q,然后才能删掉p结点,单向链表只能往后走,不能向前走。如果需要向前走......
  • Nest.js + TypeOrm:原始SQL查询及其参数绑定
    上一篇Nest.js+TypeOrm:安装、编写实体类参数化原始SQL查询使用DataSource,注意,如果是PostgreSQL,则参数占位符不能使用问号?,只能使用$n,并且在没有表名的情况下需要指定类型:否则,会出现错误:PostgreSQL-ERROR:couldnotdeterminedatatypeofparameter$1,参见:https://b......
  • WPF中实现含有中心点Slider双向滑动条
    想要实现的效果原生滑动条需要认识一下滑动条的组成在原生控件中生成“资源字典”对应的样式然后在track所在的列进行添砖加瓦由于track在row="1"的位置,只需要在这个位置上面添加一个Ellipse和LineEllipse是来描述固定在滑动条上的中心点的位置line是来描述Thumb从中心......
  • Vue开发实战(02)-MVVM模式
    1JQ实现待办任务列表<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>TodoListJquery</title><scriptsrc='jquery.js'></script></head><......