MVM与Vue
MVVM与MVC的区别
MVC
MVVM
总结
MVVM-Model View ViewModel
三者之间的联系,以及对应的代码
ViewModel的理解,联系View与Model

Vue实现三要素
响应式
vue如何监听到data的每个属性变化
响应式定义
Vue实现主要依赖于Object.defineProperty
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<p>Object.defineProperty test</p>
<p>响应式</p>
<script type="text/javascript">
var obj = {
name: 'zhangsan',
age: 25
}
console.log(obj)
var obj = {}
var _name = 'shangsan'
Object.defineProperty(obj, 'name', {
get: function () {
console.log('get', _name) // 监听
return _name
},
set: function (newVal) {
console.log('set', newVal) // 监听
_name = newVal
}
})
</script>
</body>
</html>
模拟
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<p>Object.defineProperty test</p>
<p>模拟</p>
<script type="text/javascript">
////Vue
// var vm = new Vue({
// el: '#app',
// data: {
// name: 'zhangsan',
// age: 20
// }
// })
//模拟Vue监听name和age
var vm = {}
var data = {
name: 'zhangsan',
age: 20
}
var key, value
for (key in data) {
//命中闭包 新建一个函数 保证key的独立的作用域
(function (key) {
Object.defineProperty(vm, key, {
get: function () {
console.log('get', data[key]) // 监听
return data[key]
},
set: function (newVal) {
console.log('set', newVal) // 监听
data[key] = newVal
}
})
})(key)
}
</script>
</body>
</html>
模板引擎
vue的模板如何被解析,指令如何处理
模板
本质:字符串
有逻辑 v-if v-for
与html格式很像,但是有很大区别/Vue动态 html静态
最终转换为html显示
模板最终转换为JS代码:
有逻辑,必须用JS实现(图灵完备)
转换为html渲染页面,必须用JS实现
模板最后转换成一个JS函数(render函数)
模板字符串——>变成成js渲染函数——>渲染成HTML
render函数
render函数与vdom
渲染
vue的模板如何被渲染成html,以及渲染过程
源码
todolist.html