Vue声明式渲染、条件与循环、事件绑定、双向绑定及生命周期1111111111111111111111111111111

Vue声明式渲染、条件与循环、事件绑定、双向绑定
1.声明式渲染:语法{{message}}在这里插入图片描述
数据:
在这里插入图片描述
结果:
在这里插入图片描述
2.条件与循环
v-if
条件判断使用v-if指令:
v-else
可以用v-else指令给v-if添加一个"else"块。
v-show
根据条件展示元素。
v-ifv-show的区别

  在切换 v-if 块时,Vue.js 有一个局部编译/卸载过程,因为 v-if 之中的模板也可能包括数据绑定或子组件。

  v-if 是真实的条件渲染,因为它会确保条件块在切换当中合适地销毁与重建条件块内的事件监听器和子组件。

  v-if 也是惰性的:如果在初始渲染时条件为假,则什么也不做——在条件第一次变为真时才开始局部编译(编译会被缓存起来)。

  相比之下,v-show 简单得多——元素始终被编译并保留,只是简单地基于 CSS 切换。

  一般来说,v-if 有更高的切换消耗而 v-show 有更高的初始渲染消耗。因此,如果需要频繁切换 v-show 较好,如果在运行时条件不大可能改变 v-if 较好。
  

v-for
循环使用v-for指令。
v-for 指令需要以 site in sites 形式的特殊语法, sites 是源数据数组,并且 site 是数组元素迭代的别名。

v-for 也可以绑定数据到数组来渲染一个列表。

事件绑定
在vue中,绑定事件,用v-on:事件类型, 如绑定一个点击事件, 我们可以这样子做
window.onload = function () {
var c = new Vue({
el : ‘body’,
methods : {
say : function(){
alert( ‘欢迎学习vue’ );
}
}
});
}

添加方法,需要在vue实例的对象参数中,添加一项methods配置, methods是字面量方式,如上例,我们添加了一个say方法, 在按钮中绑定了一个点击事件,当事件触发的时候,执行say();
二、绑定双击事件,通过在methods方法中定义的函数,操作data中的数据
window.onload = function () {
var c = new Vue({
el : ‘body’,
data : {
arr : [ 10, 20, 30 ]
},
methods : {
change : function(){
this.arr.push( 40 );
}
}
});
}

<input type="button" value="点我" v-on:dblclick="change();"/>
<ul id="box">
  <li v-for="value in arr">{{value}}</li>
</ul>

上述例子,通过在按钮中绑定双击事件,当事件触发时,调用change方法, 通过this.arr 访问data中定义的数组arr, 向arr中push值40,那么data中的arr数据就被修改了,基于vue是MVVM驱动方式, 那么arr的修改 就会 实时更新到视图中.结果就是在ul下面新增一项li,值为40
三、指令:v-show,值为false/true. 当为false时,该元素隐藏,当为true时,该元素显示.

输出结果:

四、点击按钮,实现div显示与隐藏

双向绑定
Vue内部通过Object.defineProperty方法属性拦截的方式,把data对象里每个数据的读写转化成getter/setter,当数据变化时通知视图更新。

生命周期
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
mounted
1 .在mounted里面修改data里面的数据,并不是想要的直接就拿mounted里面的修改过的值渲染界面,而是还会先拿data里面的初始值进行渲染,然后走beforeUpdate这里拿新的数据进行渲染
2 .这是不是说如果想要修改data里面的数据,要在beforeMounted的时候修改呢
3 .其实beforeMounted也是先按照默认值进行渲染,如果beforeMounted里面修改数据比较慢的话,他是不会等着的,还是会直接执行下一个生命周期函数。也就是说所有的生命周期函数之间没有done的操作
4 .如果在beforeMounted里面加一个setInterval()来延迟修改值的话,也会触发beforeMounted函数
5 .往下看其实发现在mounted生命周期之前修改data里面的数据都是在修改虚拟dom,直到mounted之后任何修改才会被渲染到页面上。
6 .所以理论上只要在mounted之前修改数据都行,比如mounted里面进行ajax请求,也是这个原理
7 .这个还需要再看下源码,应该就能记得比较清楚
8 .挂载页面。
beforeCreate
1 .进行初始化事件,this指向创建的实例
2 .不能访问到data
3 .不能访问computed
4 .不能访问watch
5 .不能访问methods
6 .以上的方法和数据
7 .用来初始化非响应变量
created钩子
1 .实例创建完成
2 .数据已经和data属性绑定,此时放在data中的属性值发生改变的同时,视图也会改变
3 .可以初始化ajax请求了
4 .可以访问data
5 .可以访问computed
6 .可以访问watch
7 .可以访问methods
8 .可以访问到以上的方法和数据
9 .未挂载到DOM
10 .不能访问到ref属性内容为空数组
beforeMount
1 .判断是否有el选项,有就继续,没有就停止编译,除非调用vm.$moune(el)
2 .是否有template参数选项
1 .有template参数选项,将模板编译为render函数
2 .没有template选项,将外部html作为模板编译
3 .template中的模板优先级要高于outer HTML的优先级

{{message + '这是在outer HTML中的'}}

//有template属性的时候这个就不会被渲染了
3 .如果Vue对象中还有一个render函数的话,那么又会先渲染render函数里面的内容。所以这是有优先级的 4 .模板编译完成,但是未挂载,无法获取dom 5 .给实例对象添加$el成员 6 .在挂载开始前被调用,在beforeMount之前,会找到对应的template,并编译成render函数 mounted 1 .在mounted之前还是通过{{message}}进行占位的,因为还没有挂载到页面上,还是在js中以虚拟dom形式存在的 2 .mounted之后换成了我们想要的样子 3 .实例挂载到DOM上,此时可以通过DOM api获取到DOM节点。 4 .$ref属性可以访问 5 .常用于获取VNode信息ajax请求 beforeUpdate 1 .当data中的数据发生了改变,会触发对应组件的重新渲染 2 .响应式数据更新时调用,发生在虚拟dom打补丁之前 3 .适合在试图更新之前访问现有dom,比如手动移除或者添加事件监听器 updated 1 .虚拟dom重新渲染和打补丁之后调用,组件dom已经更新,可执行依赖dom的操作 2 .避免在这个钩子中操作数据,不然可能陷入死循环 beforeDestory 1 .实例销毁之前调用,这一步实例仍然可以使用,this仍然可以获取实例 2 .常用于销毁定时器,解绑全局事件,销毁插件对象等操作 destoryed 1 .实例销毁之后调用,调用后,Vue实例指示的所有东西都会解绑,所有事件监听器都会被移除,所有子实例也会被销毁、 注意 1 .created阶段的ajax请求和mounted阶段请求的区别:前者页面未出现,如果请求消息太多,页面会长时间处于白屏状态 2 .mounted不会承诺所有的子组件也都一起被挂载。如果希望等到整个视图都被渲染完毕,可以使用this.$nextTick。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值