理解vue与MVVM三要素
MVVM到底是什么,跟Jquery有什么区别?
MVVM理解,跟MVC区别
- Model View Controller,一般是用户操作view视图按钮,触发controller内方法,cotroller修改model数据,model通知view,算是后端开发的主流思想
- vue中template为View, data对象为Model,new Vue({el,data,methods})为ViewModel,连接视图view与data,view通过DOMlistenser事件'on'绑定来操作model,model通过数据绑定dataBinding操作view
数据,视图层是否分离
- vue中,proxy代理_data数据,并且不允许直接修改。template为视图
- 不分离背离了开放封闭的原则,不利于维护,功能扩展
以数据驱动视图
- 只修改数据,就会触发封装好的dom操作。不需要手动进行dom操作
MVVM 实现三要素
如何监听变化,实现响应式
- Object.defineProperty设置get,set监听data变化
- vm.data,利用Object.defineProperty,proxy代理data对象,便于render函数中的this取值
视图模板解析,模板引擎
- 本质是字符串,有v-if,v-for等逻辑,需要以js执行
将js中data对象属性捆绑到render函数,最后返回vnode,render函数中结构与snabbdom中h函数相似
// vue
function render () {
with (this) { //将_c,_v,price的this省略,相当于this._c,this._vthis.price
_c('div', {attrs: {'id': 'app'}}, [_c('span', [_v(_s(price))])]) //_c创建vnode,_v字符串节点,_s字符串转话
}
}
// snabbdom
h('div#app', [
h('span', vm.price)
])
dom如何生成的,如何在监听变化后渲染,使用patch方法与snabbdom相同
- 首次渲染
更新渲染
vm._update(vnode) {
const prevVnode = vm.vnode
vm._vnode = vnode
if (!prevVnode) {
vm.$el = vm.__patch__(vm.$el,vnode) //初次渲染
} else {
vm.$el = vm.__patch__(prevVnode,vnode)
}
}
function updateComponent() {
vm._update(vm._render()) //此处render即是模板转化的render函数,执行后可生成vnode
}
来源:https://segmentfault.com/a/1190000016066200
理解vue与MVVM三要素的更多相关文章
- MVVM 和 VUE三要素:响应式、模板引擎、渲染
MVVM 和 VUE三要素:响应式.模板引擎.渲染:https://blog.csdn.net/weixin_37644989/article/details/94409430
- vue三要素及底层实现机制
深入解析Vue 我们首先来熟悉一下我们这个文档所学习内容的流程. 先对比一下jQuery和Vue的区别,再讲述Vue的MVVM模型,接着讲解Vue的实现流程. 当然,我是不相信没有对比哪来的伤害,没有 ...
- js架构设计模式——你对MVC、MVP、MVVM 三种组合模式分别有什么样的理解?
你对MVC.MVP.MVVM 三种组合模式分别有什么样的理解? MVC(Model-View-Controller)MVP(Model-View-Presenter)MVVM(Model-View-V ...
- 【Vue高级知识】细谈Vue 中三要素(响应式+模板+render函数)
[Vue高级知识]细谈Vue 中三要素(响应式+模板+render函数):https://blog.csdn.net/m0_37981569/article/details/93304809
- 深入理解vue
一 理解vue的核心理念 使用vue会让人感到身心愉悦,它同时具备angular和react的优点,轻量级,api简单,文档齐全,简单强大,麻雀虽小五脏俱全. 倘若用一句话来概括vue,那么我首先想到 ...
- 【腾讯Bugly干货分享】彻底弄懂 Http 缓存机制 - 基于缓存策略三要素分解法
本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:https://mp.weixin.qq.com/s/qOMO0LIdA47j3RjhbCWUEQ 作者:李 ...
- Http协议:彻底弄懂 Http 缓存机制 - 基于缓存策略三要素分解法
转载:http://mp.weixin.qq.com/s/uWPls0qrqJKHkHfNLmaenQ 导语 Http 缓存机制作为 web 性能优化的重要手段,对从事 Web 开发的小伙伴们来说是必 ...
- 实现一个类 Vue 的 MVVM 框架
Vue 一个 MVVM 框架.一个响应式的组件系统,通过把页面抽象成一个个组件来增加复用性.降低复杂性 主要特色就是数据操纵视图变化,一旦数据变化自动更新所有关联组件~ 所以它的一大特性就是一个数据响 ...
- [信息安全] 4.一次性密码 && 身份认证三要素
[信息安全]系列博客:http://www.cnblogs.com/linianhui/category/985957.html 在信息安全领域,一般把Cryptography称为密码,而把Passw ...
随机推荐
- Tensorflow2(二)tf.data输入模块
代码和其他资料在 github 一.tf.data模块 数据分割 import tensorflow as tf dataset = tf.data.Dataset.from_tensor_slice ...
- Charles 断点修改Response
前言: 我们可以通过map功能进行重定向,但如果同一个域名进行的是不同请求与返回.此时map在这里就不适用了. 我们可以通关对某一请求进行断点,在进行修改请求或者返回.这样就可以满足我们的需求了. 一 ...
- WPF新手快速入门系列 3.MVVM
[概要] 这一章主要讲述,讲述MVVM模式和用法. 如有学习过程中想交流学习.疑惑解答可以来此QQ群交流:580749909.(所有涉及到的源码都上传到了群文件里) 希望加群的人提问时尽量想清楚自己的 ...
- playable
探索TimelinePlayableAPI,让Timeline为所欲为 https://blog.csdn.net/qq826364410/article/details/80534892 Playa ...
- unity5打包机制下,一种资源打ab和资源管理的方案
unity5打包机制下,一种资源打ab和资源管理的方案.1.打ab: 1.设置平台 2.清楚所有资源的assetbundlename: string[] abNameArr = AssetDataba ...
- Educational Codeforces Round 68 (Rated for Div. 2)-D. 1-2-K Game
output standard output Alice and Bob play a game. There is a paper strip which is divided into n + 1 ...
- 深入了解Netty【七】Netty核心组件
1.Bootstrap与ServerBootstrap bootstrap用于引导Netty的启动,Bootstrap是客户端的引导类,ServerBootstrap是服务端引导类.类继承关系: 2. ...
- 利用css3 transform实现一个时钟
transform:rotate(1deg) <!DOCTYPE html> <html lang="en"> <head> <meta ...
- 干货:用好这13款VSCode插件,工作效率提升10倍
文章每周持续更新,原创不易,「三连」让更多人看到是对我最大的肯定.可以微信搜索公众号「 后端技术学堂 」第一时间阅读(一般比博客早更新一到两篇) 大家好我是lemon, 马上进入我们今天的主题吧. 又 ...
- C# 压缩源文件(导出源文件word文件)
说明 1 : 在webUI 公共类,存放 ZipHelper 类 说明 2 :判断文件路径是否存在,不存在则创建文件夹 说明 3 : 引用类方法,判断压缩文件,返回的,是true/false 引用 ...