vue笔记(module 1)

vue笔记(module 1),第1张

写在前面:温故而知新,最近在系统的复习vue,我会把几个章节分开发出来,欢迎大家指正

第 1 章:Vue 核心 1. Vue 简介

vue:动态构建用户界面的渐进式JavaScript 框架

英文官网: https://vuejs.org/

中文官网: https://cn.vuejs.org/

1.vue的特点

遵循 MVVM 模式

编码简洁, 体积小, 运行效率高, 适合移动/PC 端开发

它本身只关注 UI, 也可以引入其它第三方库开发项目

2.与其它 JS 框架的关联 借鉴 Angular 的模板和数据绑定技术借鉴 React 的组件化和虚拟 DOM 技术 3.Vue 周边库

vue-cli: vue 脚手架

vue-resource

axios

vue-router: 路由

vuex: 状态管理

element-ui: 基于 vue 的 UI 组件库(PC 端)

4.vue特点 采用组件化模式,提高代码复用率,让代码更好的维护

声明式编码,让编码人员无需直接 *** 作DOM元素,提高开发效率

使用虚拟DOM+优秀的Diff算法,尽量复用DOM节点。

5.前置知识(熟悉即可):

4.初识Vue


	
		
		初识Vue
		
		
		
	
	
		{xxx}}中的xxx要写js表达式,且xxx可以自动读取到data中的所有属性;
				7.一旦data中的数据发生改变,那么页面中用到该数据的地方也会自动更新;

				注意区分:js表达式 和 js代码(语句)
						1.表达式:一个表达式会产生一个值,可以放在任何一个需要值的地方:
									(1). a
									(2). a+b
									(3). demo(1)
									(4). x === y ? 'a' : 'b'

						2.js代码(语句)
									(1). if(){}
									(2). for(){}
		-->

		
			{{name}}
		

		
	

2.模板语法

模板的理解:

html 中包含了一些 JS 语法代码,语法分为两种,分别为:

插值语法(双大括号表达式)

指令(以 v开头)

插值语法:

功能: 用于解析标签体内容语法: {{xxx}} ,xxxx 会作为 js 表达式解析

指令语法:

功能: 解析标签属性、解析标签体内容、绑定事件举例:v-bind:href = ‘xxxx’ ,xxxx 会作为 js 表达式被解析,v-bind是单向数据绑定说明:Vue 中有有很多的指令,此处只是用 v-bind 举个例子


	
		
		模板语法
		
		
	
	
		{xxx}},xxx是js表达式,且可以直接读取到data中的所有属性。
					2.指令语法:
							功能:用于解析标签(包括:标签属性、标签体内容、绑定事件.....)。
							举例:v-bind:href="xxx" 或  简写为 :href="xxx",xxx同样要写js表达式,
									 且可以直接读取到data中的所有属性。
							备注:Vue中有很多的指令,且形式都是:v-????,此处我们只是拿v-bind举个例子。

		 -->
		
		
			插值语法
			你好,{{name}}
			
指令语法 点我去{{school.name}}学习1 点我去{{school.name}}学习2
3.数据绑定


	
		
		数据绑定
		
		
	
	
		
		
		
			
			

			
			单向数据绑定:
双向数据绑定:
4.el与data 的两种写法




	
	el与data的两种写法
	
	



	
	
	
		你好,{{name}}
	





5.理解MVVM

1.M:模型(Model):对应data中的数据

2.V:视图(View):模板

3.VM:视图模型(ViewModel):Vue实例对象

Vue中的代码体现:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Cd5mrzFx-1653524484600)(http://www.kaotop.com/file/tupian/20220528/image-20220508121547352.png)]



	
		
		理解MVVM
		
		
	
	
		
		
		
			学校名称:{{name}}
			学校地址:{{address}}
			
			{1+1}}
			测试一下2:{{$options}}
			测试一下3:{{$emit}}
			测试一下4:{{_c}} -->
		
	

	

6.数据代理 1.Object.defineProperty()

Object.defineProperty()方法介绍



	
		
		回顾Object.defineproperty方法
	
	
		
	

2.理解数据代理
	
	

3.vue中的数据代理

在创建data对象时,vm通过Object.defineproperty()方法将data中的属性添加到vm上,为每一个添加到vm上的属性,都指定一个getter/setter,通过数据代理,在getter/setter内部去 *** 作(读/写)data中对应的属性。



	
		
		Vue中的数据代理
		
		
	
	
		
		
		
			学校名称:{{name}}
			学校地址:{{address}}
		
	

	

7.vue事件处理 1.事件的基本使用


	
		
		事件的基本使用
		
		
	
	
		
		
		
			欢迎来到{{name}}学习
			
			
			
		
	

	

2.事件修饰符

Vue中的事件修饰符:

​ 1.prevent:阻止默认事件(常用);

​ 2.stop:阻止事件冒泡(常用);

​ 3.once:事件只触发一次(常用);

​ 4.capture:使用事件的捕获模式;

​ 5.self:只有event.target是当前 *** 作的元素时才触发事件;

​ 6.passive:事件的默认行为立即执行,无需等待事件回调执行完毕;



	
		
		事件修饰符
		
		
		
	
	
		
		
			欢迎来到{{name}}学习
			
			点我提示信息

			
			
				
				
				
			

			
			

			
			
				div1
				
					div2
				
			

			
			
				
			

			
			
				1
				2
				3
				4
			

		
	

	

3.键盘事件


	
		
		键盘事件
		
		
	
	
		
		
		
			欢迎来到{{name}}学习
			
		
	

	

8.计算属性与监视 1.计算属性computed 姓名案例_计算属性实现


	
		
		姓名案例_计算属性实现
		
		
	
	
		
		
		
			姓: 

名:

测试:

全名:{{fullName}}

{fullName}}

全名:{{fullName}}

全名:{{fullName}} -->
姓名案例_计算属性简写实现


	
		
		姓名案例_计算属性实现
		
		
	
	
		
		
			姓: 

名:

全名:{{fullName}}

2.监视属性watch




	
	天气案例_监视属性
	
	



	
	
	
		今天天气很{{info}}
		
	





Watch和computed的区别:

computed支持缓存,只有依赖数据发生改变,才会重新进行计算;而watch不支持缓存,数据变,直接会触发相应的 *** 作
computed不支持异步,当computed内有异步 *** 作时无效,无法监听数据的变化,而watch支持异步
computed属性值会默认走缓存,计算属性是基于它们的响应式依赖进行缓存的,也就是基于data中声明过或者父组件传递的props中的数据通过计算得到的值;而watch监听的函数接收两个参数,第一个参数是最新的值,第二个参数是输入之前的值
如果一个属性是由其它属性计算而来的,这个属性依赖其它属性,多对一或者一对一,一般用computed;而当一个属性发生变化时,需要执行对应的 *** 作,一对多,一般用watch

3.深度监视

深度监视:

(1) Vue中的watch默认不监测对象内部值的改变(一层)。

(2) 配置deep:true可以监测对象内部值改变(多层)。

(3) watch配置deep:true 开启深度监听

备注:

(1).Vue自身可以监测对象内部值的改变,但Vue提供的watch默认不可以!

(2).使用watch时根据数据的具体结构,决定是否采用深度监视。

			watch:{

				//监视多级结构中某个属性的变化
				/* 'numbers.a':{
					handler(){
						console.log('a被改变了')
					}
				} */
				
				//监视多级结构中所有属性的变化
				numbers:{
					//开启深度监听
					deep:true,
					handler(){
						console.log('numbers改变了')
					}
				}
			}
4.监视的简写属性




	
	天气案例_监视属性_简写
	
	



	
	
		今天天气很{{info}}
		
	





ps:vue所管理的函数不要使用箭头函数,如methods,computed

5.watch和computed的对比

computed和watch之间的区别:

1.computed能完成的功能,watch都可以完成。

2.watch能完成的功能,computed不一定能完成,例如:watch可以进行异步 *** 作。

两个重要的小原则:

1.所被Vue管理的函数,最好写成普通函数,这样this的指向才是vm 或 组件实例对象。

2.所有不被Vue所管理的函数(定时器的回调函数、ajax的回调函数等、Promise的回调函数),最好写成箭头函数,这样this的指向才是vm 或 组件实例对象。

9.绑定样式

Class 与 Style 绑定 — Vue.js (vuejs.org)



	
		
		绑定样式
		
		
	
	
		
		
		
			
			{{name}} 

{{name}}

{{name}}

{{name}}

{{name}}
10.条件渲染


	
		
		条件渲染
		
	
	
		
		
		
			当前的n值是:{{n}}
			
			
			{name}} -->
			{name}} -->

			
			{name}} -->
			{name}} -->

			
			

			
			

		
	

	

11.列表渲染 1.基本列表(v-for)


	
		
		基本列表
		
	
	
		
		
		
			
			人员列表(遍历数组)
			
				
					{{p.name}}-{{p.age}}
				
			

			
			汽车信息(遍历对象)
			
				
					{{k}}-{{value}}
				
			

			
			测试遍历字符串(用得少)
			
				
					{{char}}-{{index}}
				
			
			
			
			测试遍历指定次数(用得少)
			
				
					{{index}}-{{number}}
				
			
		

		

2. key的原理

面试题:react、vue中的key有什么作用?(key的内部原理)

虚拟DOM中key的作用:

​ key是虚拟DOM对象的标识,当数据发生变化时,Vue会根据【新数据】生成【新的虚拟DOM】, 随后Vue进行【新虚拟DOM】与【旧虚拟DOM】的差异比较,比较规则如下:

对比规则:

​ (1).旧虚拟DOM中找到了与新虚拟DOM相同的key:

​ ①.若虚拟DOM中内容没变, 直接使用之前的真实DOM!

​ ②.若虚拟DOM中内容变了, 则生成新的真实DOM,随后替换掉页面中之前的真实DOM。

​ (2).旧虚拟DOM中未找到与新虚拟DOM相同的key,创建新的真实DOM,随后渲染到到页面。

用index作为key可能会引发的问题:

1.若对数据进行:逆序添加、逆序删除等破坏顺序 *** 作:

​ 会产生没有必要的真实DOM更新 ==> 界面效果没问题, 但效率低。

​ 2.如果结构中还包含输入类的DOM:

​ 会产生错误DOM更新 ==> 界面有问题。

开发中如何选择key?

1.最好使用每条数据的唯一标识作为key, 比如id、手机号、身份z号、学号等唯一值。

2.如果不存在对数据的逆序添加、逆序删除等破坏顺序 *** 作,仅用于渲染列表用于展示,使用index作为key是没有问题的。

原理图:



	
		
		key的原理
		
	
	
		
		
			
			人员列表(遍历数组)
			
			
				
					{{p.name}}-{{p.age}}
					
				
			
		

		

3.列表过滤(模糊查询)


	
		
		列表过滤
		
	
	
		
		
			人员列表
			
			
				
					{{p.name}}-{{p.age}}-{{p.sex}}
				
			
		

		

4.列表排序


	
		
		列表排序
		
	
	
		
		
			人员列表
			
			
			
			
			
				
					{{p.name}}-{{p.age}}-{{p.sex}}
					
				
			
		

		

5.Vue监视数据的原理

数据劫持(数据代理) - 简书 (jianshu.com)

Vue监视数据的原理:

vue会监视data中所有层次的数据。如何监测对象中的数据?

通过setter实现监视,且要在new Vue时就传入要监测的数据。
(1).对象中后追加的属性,Vue默认不做响应式处理
(2).如需给后添加的属性做响应式,请使用如下API:

​ Vue.set(target,propertyName/index,value) 或 vm.$set(target,propertyName/index,value)

如何监测数组中的数据?

通过包裹数组更新元素的方法实现,本质就是做了两件事:
(1).调用原生对应的方法对数组进行更新。
(2).重新解析模板,进而更新页面。

在Vue修改数组中的某个元素一定要用如下方法:

1.使用这些API:push()、pop()、shift()、unshift()、splice()、sort()、reverse() /(这些方法会更改原数组)
2.使用Vue.set() 或 vm.$set()

3.变更方法,顾名思义,会变更调用了这些方法的原始数组。相比之下,也有非变更方法,例如 filter()、concat() 和 slice()。它们不会变更原始数组,而总是返回一个新数组。当使用非变更方法时,可以用新数组替换旧数组:

特别注意:Vue.set() 和 vm.$set() 不能给vm 或 vm的根数据对象(vm__data__)上,添加属性!!!





	
	总结数据监视
	
	
	




	
	
		学生信息
		 







姓名:{{student.name}} 年龄:{{student.age}} 性别:{{student.sex}} 爱好: {{h}} 朋友们: {{f.name}}--{{f.age}}
12.v-model收集表单数据

ps:v-mdoel尽量不要绑定props的数据



	
		
		收集表单数据
		
	
	
		
		
		
			
		
	

	

13.过滤器




	
	过滤器
	
	



	{ xxx | 过滤器名}}  或  v-bind:属性 = "xxx | 过滤器名"
						3.v-model不可以和过滤器一起用
				备注:
						1.过滤器也可以接收额外参数、多个过滤器也可以串联
						2.并没有改变原本的数据, 是产生新的对应的数据
		-->
	
	
		显示格式化后的时间
		
		现在是:{{fmtTime}}
		
		现在是:{{getFmtTime()}}
		
		现在是:{{time | timeFormater}}

		
		现在是:{{time | timeFormater('YYYY-MM-DD')}}
		
		现在是:{{time | timeFormater('YYYY-MM-DD') | mySlice }}

		学习

	

	
		{{msg2 | mySlice2}}
	





14.内置指令 1.v-text

1.作用:向其所在的节点中渲染文本内容。
2.与插值语法的区别:v-text会替换掉节点中的内容,{{xx}}则不会。



	
		
		v-text指令
		
		
	

	
		{xx}}则不会。
		-->
		
		
			你好,{{name}}
			
			
		
	

	

2.v-html


	
		
		v-html指令
		
		
	
	
		{xx}}则不会。
									(2).v-html可以识别html结构。
						3.严重注意:v-html有安全性问题!!!!
									(1).在网站上动态渲染任意HTML是非常危险的,容易导致XSS攻击。
									(2).一定要在可信的内容上使用v-html,永不要用在用户提交的内容上!
		-->
		
		
			你好,{{name}}
			
			
		
	

	

3.v-cloak


	
		
		v-cloak指令
		
		
	
	
		{xxx}}的问题。
		-->
		
		
			{{name}}
		
		
	
	
	

4.v-once


	
		
		v-once指令
		
		
	
	
		
		
		
			初始化的n值是:{{n}}
			当前的n值是:{{n}}
			
		
	

	

5.v-pre


	
		
		v-pre指令
		
		
	
	
		
		
		
			Vue其实很简单
			当前的n值是:{{n}}
			
		
	

	

15.自定义指令


	
		
		自定义指令
		
	
	
		
		
		
			{{name}}
			当前的n值是: 
			
			放大10倍后的n值是: 
			
			

(一)Vue.directive指令(自定义指令) - 简书 (jianshu.com)

16.vue生命周期



	
		
		分析生命周期
		
		
	
	
		
		
			
			当前的n值是:{{n}}
			
			
		
	

	



	
		
		生命周期
		
		
	
	
		
		
		
			欢迎学习Vue
			
			
		
	

	

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1322557.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-12
下一篇 2022-06-12

发表评论

登录后才能评论

评论列表(0条)

保存