初识Vue

117 阅读2分钟

初识Vue

Vue是第三方开发的渐进式基于MVVM设计模式开发的JS框架。其主要作用是为了弥补HTML、CSS不足。

1.原生开发的缺陷

​ HTML+CSS语言并不完备,主要表现在并不像高级语言那样支持语法结构(例如:循环、变量、分支等),这就大大增加了JS的工作压力,也是页面十分繁琐、复用性差,不好维护。

2.什么是MVVM模式

​ 视图(View):

​ 增强了HTML和CSS的功能,比如提供了变量,分支,循环等功能。

​ 模型数据(Model):

​ 将页面上所需的变量都封装在data对象当中,集中保存,便于维护

​ 控制器(View Model):

​ 自动实现模型数据data与视图中变量的绑定,可做到实时同步。此外,控制器封装了所需的增删改查操作,避免了重复操作。

3.Vue如何实现MVVM模式

​ new Vue()中包含了两大子系统:

响应系统:

​ 将data放入new Vue()中后,将自动会为每个变量增加访问器属性。并将变量直接隶属于Vue对象当中。同时在访问器属性中内置了通知机制,只要试图更改data中的变量,就会触发该机制。

虚拟DOM树:

​ 仅保存View中可能变化的元素,这样相较于原生的DOM树剔除了无关的结构,使其能够更加高效的遍历所需的节点。可大大提高效率。

4.指令

​ 为HTML增加功能的特殊属性,其中包含13个

​ {{变量}} v-bind: v-show

​ v-if v-else-if v-else

​ v-for=" (item, index)of 数组/数字"

​ v-on/@ v-html v-cloak

​ v-text v-once v-pre

5.使用Object.defineProperty,模拟实现Vue的绑定原理

<ul id="nav">		
	<li>分数:</li>
	<li>{{score}}</li>			
</ul>
<script>
			var data = {
				score:1000
			};
//			虚拟DOM树
			var arr=[];
			function getChildren(parent){
				var children = parent.children;
				for (var child of children){
					if(child.children.length>0){
						getChildren(child);
					}else{
						if(child.innerHTML=="{{score}}"){
							child.innerHTML= data.score;
							arr.push({
								elem : child,
								innerHTML : "{{score}}"
							});
						}
					}
				}
			}
//			页面加载时扫描一次
			getChildren(nav);
			console.log(arr)
//			响应系统
			Object.defineProperties(data,{
				_score:{
					value:data.score,
					writable:true,
					enumerable:false
				},
				score:{
					get(){
						return this._score;
					},
					set(value){
						this._score=value;
						for(var obj of arr){
							if(obj.innerHTML=="{{score}}"){
								obj.elem.innerHTML=value;
							}
						}
					},
					enumerable:true
				}
			});
			Object.seal(data);
//			测试代码
			setInterval(function(){
				data.score+=100;
			},2000)
</script>