IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> 前端框架MVC 和 MVVM -> 正文阅读

[开发测试]前端框架MVC 和 MVVM

一,前言

1.1 MVC---Model-View-Controller

m:model 数据模型层? v:view 视图层? c:controller控制器

原理:c层需要控制model层的数据在view层进行显示

1.2 MVVM---Model-View-ViewModel

在MVVM架构下,View和Model之间并没有直接的联系,而是通过viewModel进行交互的,Model和ViewModel之间的交互是双向的,因此View数据的变化会同步到Model中,而Model数据的变化也会立即反应到View上

VUE是基于MVVM的设计模式开发的

二,代码实例

我们做一个很简单的DIV显示隐藏的效果,点击toggle可以切换下面div显示隐藏

html:

<div id="box">
? ? ? ? <button class="btn">toggle</button>
? ? ? ? <button class="btn2">big</button>
? ? ? ? <div class="box">
?
? ? ? ? </div>
? ? </div>
JS:

下面是我们不用设计模式写的JS,这种写法不利于维护,纯粹的面向过程去写代码:

? ? ? ? let btn = document.getElementsByClassName("btn")[0];
? ? ? ? let boxDom = document.getElementsByClassName("box")[0];
? ? ? ? let flag = true;
? ? ? ? btn.onclick = function(){
? ? ? ? ? ? if(flag){
? ? ? ? ? ? ? ? boxDom.style.display = "none";
? ? ? ? ? ? ? ? flag = false;
? ? ? ? ? ? }else{
? ? ? ? ? ? ? ? boxDom.style.display = "block";
? ? ? ? ? ? ? ? flag = true;
? ? ? ? ? ? }
? ? ? ? }
MVC的写法:

? ? ? ? ?//view
? ? ? ? let boxDom = document.getElementsByClassName("box")[0];
? ? ? ? //model
? ? ? ? let model = {
? ? ? ? ? ? isShow:true,
? ? ? ? ? ? isBig:false
? ? ? ? }
?
? ? ? ? //controller 业务逻辑
? ? ? ? function Controller(){
? ? ? ? ? ? this.init();//初始化
? ? ? ? }
? ? ? ? Controller.prototype = {
? ? ? ? ? ? constructor:Controller,
? ? ? ? ? ? init:function(){
? ? ? ? ? ? ? ? this.addEvent()
? ? ? ? ? ? },
? ? ? ? ? ? addEvent:function(){
? ? ? ? ? ? ? ? let btn = document.getElementsByClassName("btn")[0];
? ? ? ? ? ? ? ? let btn2 = document.getElementsByClassName("btn2")[0];
? ? ? ? ? ? ? ? let that = this;
? ? ? ? ? ? ? ? btn.onclick = function(){
? ? ? ? ? ? ? ? ? ? model.isShow = !model.isShow;
? ? ? ? ? ? ? ? ? ? //更改视图了
? ? ? ? ? ? ? ? ? ? that.render();
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? btn2.onclick = function(){
? ? ? ? ? ? ? ? ? ? model.isBig = true;
? ? ? ? ? ? ? ? ? ? //更改视图了
? ? ? ? ? ? ? ? ? ? that.render();
? ? ? ? ? ? ? ? }
? ? ? ? ? ? },
? ? ? ? ? ? render:function(){//数据驱动视图的更改
? ? ? ? ? ? ? ? boxDom.style.display = model.isShow?"block":"none";
? ? ? ? ? ? ? ? boxDom.style.width = model.isBig?"300px":"100px";
? ? ? ? ? ? }
? ? ? ? }
?
? ? ? ? new Controller();//初始化一下
虽然MVC代码比较长,不过以后用起来很方便,只要是相同的效果拿过来用就行
?

mvvm与mvc最大的区别:
MVVM实现了view与model的自动同步,也就是model属性改变的时候,?我们不需要再自己手动操作dom元素去改变view的显示,而是改变属性后该属性对应的view层会自动改变。

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2021-08-12 16:58:56  更:2021-08-12 16:59:33 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年10日历 -2024/10/18 16:35:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码