2020-10-16

VUE基础

1. 简介

VUE是一个渐进式JavaScript框架:
所谓的渐进式:类似于迭代开发(如:手机系统版本的更替)
vue.js 只是一些核心代码,可以让用户去搭建基本的页面结构;如果需求的是功能更为丰富的页面,那么就不得不引入一些插件去完成了。
需要注意的是:对于低版本浏览器(IE8及以下版本),vue.js是不支持的。

2. 原生js vs VUE

在介绍vue的基本使用步骤之前,我们先要探讨一下,程序员抛弃原生js和jQuery,而选择vue的原因:
首先,通过一段代码,先来看一下在框架引入之前,我们想要给某个标签添加内容时的操作:

<div id="root">
	<p id="pNode"></p>
</div>

<script>
// 这里是原生JS操作DOM元素,为p标签添加内容
	var pNode = document.getElementById("pNode");
	pNode.innerHTML = "这是一个p标签中的内容";
// 使用jQuery来操作p标签
	$("#pNode").text("这里使用jQuery来操作p标签")
</script>

从上面这段代码可以看出,不论是原生JS还是使用jQuery,其实都是在直接操作DOM元素,进而对元素进行更改。

那么这种操作有什么不好呢?
这里就不得不提到,浏览器的渲染过程:

  1. 将HTML结构解析成DOM树
  2. 将CSS 样式解析成CSSOM样式树
  3. 之后将DOM树和CSSOM样式树合并成为渲染树
  4. 遍历渲染树后进行布局
  5. 将渲染树的所有节点都绘制到屏幕上去

当我们直接操作DOM元素时,浏览器就会将整个流程重新执行一次,操作了几个DOM元素,整个流程就会重新执行几次。这样一来,性能上就会大大受到影响。
于是,就有了框架的用武之地。
相比于传统的获取DOM对象,再对其进行赋值,事件绑定等操作;
Vue采取的是将数据和js对象进行绑定,之后直接对数据进行操作的方式(即人们常说的数据驱动)来修改js对象的值。

3. VUE的使用

1)安装

  1. 安装:到VUE官网 官网地址
  2. 下载开发环境版本,点开之后右键另存为,将vue.js文件保存到项目中
  3. xxx.html文件中引入这个js文件,就可以了。

2)语法

首先是vue的挂载和数据显示语法

<!-- 需要设置一个根标签,用来给后面的vue设置挂载点 -->
<div id="root">
	<!-- 引入vue之后,挂载点内部就不再是单纯HTML结构了,而是模板(html+js) -->
 	<!-- 模板语法:插值语法{{}}专门用来解析元素内容 -->
	<p>{{msg}}</p>
</div>

<script>
// 这里Vue对象是以构造函数调用的,里面传入一个配置对象
	new Vue({
		// 第一个属性,用来指定挂载点,告诉vue和哪个元素挂载
		el:"#root",
		// data中是请求回来的数据和初始化状态数据
		data:{
			msg:"message",
		}
	})
</script>

挂载点内部就不再是单纯的HTML结构了,而是有HTML和JS混合而成的模板;
模板语法分为:插值语法 & 指令语法
插值语法使用双大括号来包裹要解析的元素内容
指令语法是专门用来解析元素的(当要操作标签中的属性值时)

3) 数据绑定

  1. 单向数据绑定(数据只能从data流向模板页面)
<div id="root">
	<!-- 指令语法 v-bind进行单向数据绑定,href中写的是data中定义的url属性 -->
	<a v-bind:href="url">点我跳转</a>
	<!-- 简写形式,可省略v-bind,直接用冒号 -->
	<a :href="url">省略形式跳转</a>
</div>

<script>
	new Vue({
		el:"#root",
		data:{
			url:"https://www.baidu.com"
		}
	})
</script>
  1. 双向数据绑定(一般都是针对表单类元素的)
	<div id="root">
	<!-- 使用v-model将data中的msg和input绑定起来,无论哪个改变了,另一个都会跟着变化 -->
		<input type="text" v-model="msg" />
		<p>我爱{{msg}}</p>
	</div>
	<script>
		new Vue({
			el:"#root",
			data:{
				msg:"大河北"
			}
		})
	</script>

4)事件绑定

<button v-on:click="test">点我</button>
<!-- 简写形式,可以将v-on:直接写一个@代替 -->
<button @click="test">简写button</button>
<script>
new Vue({
	methods:{
		test(){
			console.log("点击成功了")
		}
	}
})
</script>

5)computed属性

使用这个属性的情况是:当我们需要某个数据但是又没有,而这个数据和已有数据还存在着关系时

<div id="root">
	<p>{{fullName}}</p>
</div>
<script>
	new Vue({
		el:"#root",
		data:{
			firstName:"liu",
			lastName:"lang"
		}
		computed:{
			fullName(){
				return this.firstName + " " + this.lastName
 			}
		}
	})
</script>

6)watch属性

使用watch属性的情况:这个数据必然是存在的,才可以对这个数据进行监视

<div id="root">
	<p>{{fullName}}</p>
</div>
<script>
	new Vue({
		el:"#root",
		data:{
			firstName:"liu",
			lastName:"lang",
			// 先定义一个空字符串的属性
			fullName2:""
		}
		watch:{
			firstName:{
			// 这个属性让页面在刚一开始就先调用一次handler函数
				immediate: true,
			// 被监视对象中都有一个handler函数,一旦数据发生改变就调用这个函数
				handler(newValue,oldValue){
					this.fullName2 = newValue + " " + this.lastName
				}
			}
		}
	})
</script>

4. 重点知识点理解

1) 双向数据绑定的实现原理

其实,双向数据绑定的实现原理是MVVM思想的实现。

MVVM思想

MVVM(Model-View-ViewModel)是有Model、View和ViewModel三部分组成的;

  • Model层:定义数据修改和操作的业务逻辑
  • View层:视图、模板,将数据模型转化为UI展示出来
  • ViewModel层:用来连接Model和View层

从上面的图可以看出,Model层和View层并不会直接联系,而是利用中间的ViewModel层通过数据双向绑定,让另外两个层的同步工作完全可以自动进行。

Model层通过ViewModel层给View层进行数据绑定,这样Model层的数据就可以传递给View层;同时ViewModel层会给View层增加一个DOM监听,这样当View层的数据发生变化时,Model层也就得到了消息,随之改变了。

2)methods vs computed vs watch

在vue中,我们常见的三个属性,methods、computed和watch,这三个属性都和数据变化相关,那么这三个属性的应用场景是什么呢?他们之间的区别又在哪儿呢?

  • computed:适用于一些重复使用的数据或复杂且费时的运算
  • methods:同样适用复杂的运算

methods 和 computed的区别:
两种方法都可以实现复杂的计算,但是computed属性的效率要高很多,因为computed中得到的结果会存在缓存中,下次再调用computed中的方法时就直接在缓存中拿结果;而methods中的方法使用一次,就调用一次。

computed 和 watch的区别:

  1. computed能完成的功能,watch都可以实现;但是watch能完成的功能,computed却不一定能实现;
  2. computed内部只能是同步任务,watch内部可以是异步任务
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值