Vue2.6-浅析 MVP设计模式与MVVM设计模式

84 篇文章 0 订阅
73 篇文章 0 订阅

MVP 设计模式

M model层  数据层

P  Presenter层 业务逻辑相关的 控制层

V  view层 视图层 页面上的dom展示

通过以下 JQuery实现 toDoList

      M层很弱  没有通过ajax获取远程数据

     div区域 dom域 是 V 层视图

     视图改变的时候  触发控制器  控制器可以调M(模型层)发送ajax请求获取数据   控制器也可以根据视图触发的事件操作dom改变视图

    P 层是 MVP 设计模式中最核心的一层 是链接M 和 V的中转站

  使用MVP 设计模式   控制器大量的逻辑都是在 操作dom

<!DOCTYPE html>
<html>
	<head>
		<title>JQuery toDoList</title>
		<meta charset="UTF-8">

		<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>	

	</head>

	<body>
		<div>
			<input type='text' id='input'/>
			<button id='btn'>submit</button>
			<ul id='list'></ul>
		</div>

		<script>
			
			function Page(){}

			$.extend(Page.prototype,{
				init:function() {
					this.bindEvents()
				},
				bindEvents:function() {
					var btn = $('#btn') ;
					//$.proxy将 handleBtnClick 绑定到当前Page实例
btn.on('click',$.proxy(this.handleBtnClick,this))
				},
				handleBtnClick:function() {
					//alert('123') 
					var inputElem = $('#input') ;
					var inputValue = inputElem.val() ;
					var ulElem = $('#list') ;
					ulElem.append('<li>'+inputValue+'</li>') ;
					inputElem.val('') ;
				}
			})

			var page = new Page() ;
			page.init() ;
		</script>
	</body>
</html>

MVVM设计模式

 

如下 Vue实现  toDoList

M 模型层  操作数据

V 层  div区域   dom视图

操作 M 层数据  V 层视图同步 改变 

VM 层  vue底层 监听到数据变化 重新渲染视图  vue监听到事件被触发  通过VM 调用 M层逻辑 改变M层数据 数据发生变化  VM 自动重新渲染视图

MVVM模式  核心在于 M层开发 MVP模式JQuery面向 dom开发    MVVM模式  Vue面向数据开发

(vue如何知道数据改变了 并且自动渲染视图 ?   ES5中 核心API   object.defineProperties 同时引入了虚拟dom机制 )

<!DOCTYPE html>
<html>
	<head>
		<title>ToDoList</title>
		<meta charset="UTF-8">

		<script src="./vue.js"></script>
	</head>

	<body>
		<div id="app">
			<input type='text' v-model="inputValue"/>
			<button v-on:click="handleBtnClick">submit</button>
			<ul>
				<li v-for="item in list">{{item}}</li>
			</ul>
		</div>


		<script>
			var app = new Vue({
				el:"#app",
				data:{
					list:[] ,
					inputValue:'input something...'
				},
				methods:{
					handleBtnClick:function() {
						this.list.unshift(this.inputValue)
						this.inputValue='input something...'
					}
				}

			})
		</script>
	</body>
</html>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值