Vue基础学习笔记

方法和函数的区别

  1. 面向对象的时候称为方法,面向流程的时候叫函数。
  2. 方法是作为一个对象实例的属性的函数

生命周期

生命周期:事务从诞生到消亡的整个过程
以下是生命周期函数,可以在某个周期做某件事

[
	'beforeCreate',
	'created',		//组件创建完成
	'beforeMount',
	'mounted',		//DOM树创建完成
	'beforeUpdate',
	'updated',		//DOM更新完成
	'beforeDestroy',
	'destroyed',
	'activated',	//钩子函数,需要作用keep-alive下
	'deactivated',
	'errorCaptured',
	'serverPrefetch'
  ]

计算属性

computed:运行时作为一个属性来添加,所以调用里面函数时不用加括号()

注:函数起名时不要用动词,因为computed时作为属性来调用,如getBgColor => BgColor

区别:  
	conputed在多次调用时只执行一次,有缓存,只做数据处理  
	methods是调用几次执行几次,没有缓存,浪费性能  

函数重载

在js中相同名的函数,下面的函数会覆盖上面的

在typescript中,函数重载指

  • 两(多)个函数的函数名相同
  • 传入的参数不同
  • 与返回值无关

v-on的参数问题

  1. 如果该方法不需要额外参数,那么调用方法时()可以不添加。

    @click = 'getBtn'

  2. 如果方法中有参数,调用时没有添加()和参数,则默认传入event

  3. 如果需要同时传入某个参数,同时需要event时,可以通过$event传入事件。

    @click = 'getBtn("abc",$event)'


v-on的修饰符

  • .stop - 调用 停止事件冒泡 event.stopPropagation() 。

    <a v-on:click.stop="doThis"></a>

  • .prevent - 调用 阻止默认事件 event.preventDefault()。
    <form v-on:submit.prevent="onSubmit"></form>

  • 修饰符可以串联

    <a v-on:click.stop.prevent="doThat"></a>

  • .{keyCode | keyAlias} - 只当事件是从特定键触发时才触发回调。

    <input type="text" @keyup="keyup($event.which)"> 	//监听键码
    <input type="text" @keyup.tab="keyup()"> 
    <input type="text" @keyup.13='keyup()'>
    
  • .self - 只当在 event.target 是当前元素自身时触发处理函数

    即事件不是从内部元素触发的

    <div v-on:click.self="doThat"></div>

  • .native - 监听组件根元素的原生事件。

  • .once - 只触发一次回调。


v-if、v-else-if、v-else

原理:

v-if后面的条件为布尔值,为flase时对应的元素以及其子元素不会渲染。

<h2 v-if="ishow">当ishow为true时,显示我</h2>
<h2 v-else>当ishow为false时,显示我</h2>

这三个指令和JavaScript的指令类似

bug注意:

  • v-if的渲染时为虚拟dom,为了节省内存会把判断有无原标签,有的话原标签复用。
  • 但后果是如果输入input标签进行if else切换会出现原来输入的value还存在的问题。
  • 解决方法是在标签内部添加key,key值不一样不会复用。 ps: key='new'

v-show

v-show和v-if非常相似,用于决定一个Dom会不会渲染
true渲染,false隐藏

区别:

  • v-show是在标签内部添加行内样式display='none'
  • v-for是直接创建或移除Dom
  • 实际开发中我们用v-for多一点

v-for

v-for遍历数组

<!-- 项目,下标 -->
<p v-for="(item,index) in message">{{index}}-{{item}}</p>

v-for遍历对象

<!-- 值,键,下标 -->
<li v-for="(value,key,index) in message">{{index+'.'+key+'-'+value}}</li>

v-for 组件的key属性

  • 官方推荐我们使用v-for时,给对应的元素或组件添加上一个:key属性。

  • Vue的虚拟DOM的Diff算法在更新操作节点时,给某个元素插入赋值,
    后面的元素依次更新,没有则重新创建dom再赋值,来完成节点操作,
    这样的效率很慢ps:ABCD => ABECD中,c=>e,d=>c,''=>d

  • 添加key可以给每个元素做唯一标识,Diff算法就可以正确识别节点准确更新

  • 所以,key的作用主要是为了高效的更新虚拟DOM。

    {{item}}


vue数据响应式

响应式是指数据可以动态响应到页面上,不需要手动刷新

以下方法操作数组vue都是响应式的

  • push()
  • pop()
  • shift()
  • unshift()
  • splice()
  • sort()
  • reverse()

直接使用下标的方式来改变数组不是响应式

this.arr[0] = 'aaa'  

解决办法

(被修改的obj/数组,key/下标,要修改的值)
Vue.set(this.arr,0,'bbb')

删除数据delete也不是响应式

delete this.obj.age;

解决办法

(被删除的obj,key)
Vue.delete(this.obj,'age')

过滤器(filters)

  • 过滤器filters和计算属性computed都是vue的一种方法
  • 内部也是一种函数方法,返回过滤后的值
  • 和computed一样,调用时无需加括号()
  • 但过滤器函数内可以传值,传递的是当前被过滤的数据
<h2>{{数据 | 过滤器}}</h2>
<div id='app'>
	<h2>{{message | changeMessage}}</h2>
</div>

<script>
	const app = new Vue({
		el:'#app',
		data:{
			message:1.23
		},
		filters:{
			changeMessage(value){
				//toFixed是显示小数点后几位
				return value.toFixed();
			}
		}
	})
</script>

监听data属性(watch)

watch:用法是监听data的属性,当属性发生改变调用函数。和methods同级

注意:不要使用箭头函数来定义watch函数。因为箭头函数指向父级作用域上下文,不会指向vue实例

	watch:{
	  data(){
		setTimeout(this.refresh,20)
	  }
	}

img加载监听

原生的js监听图片:

img.onload = function() {}  

Vue中监听:

@load='方法'

$nextTick下一帧

$nextTick()内部传递箭头函数

意为箭头函数可以在其他函数运行完的下一帧运行。

原文地址:https://www.cnblogs.com/lovecode3000/p/12322884.html