修饰符
事件修饰符
.stop 阻止事件传播
.prevent 阻止超链接默认行为
.capture 添加事件监听器时使用事件捕获模式,即内部元素触发的事件先在此处理,然后才交由内部元素进行处理
.self 只当在 event.target 是当前元素自身时触发处理函数,即事件不是从内部元素触发的
表单修饰符
number 转数值类型
trim 去空格
lazy 在 “change” 时而非 “input” 时更新
input v-model.lazy="msg"
键盘事件
@keyup
计算属性
定义成方法使用,本质上一个属性 computed:{ isBooks(){ 依赖于响应式属性, 当响应式属性值变化自动重新计算 return value } }
缓存
默认只读值
computed: {
isBook: {
get() {
return value
},
set(value) {
}
}
}
侦听器 watch
侦听Vue 实例上data中的数据和一些非DOM元素改变,可以获取数据改变前的值和改变后的值
<div id="app"></div>
<script src="../js/vue.js"></script><script>
const vm = new Vue({
el: '#app',
data:{
username: ""
},
watch:{
//形参(newval,oldval)=>(改变后的值,改变前的值)
username(newVal,oldval){
console.log( '>>> ',newVal,oldval);
}
}
})
immediate 选项
默认情况下,组件在初次加载完毕后不会调用 watch 侦听器。如果想让 watch 侦听器立即被调用,则需要使用 immediate 选项。
deep 选项
深度侦听
如果 watch 侦听的是一个对象,如果对象中的属性值发生了变化,则无法被监听到。此时需要使用 deep 选项。
监听对象单个属性的变化
const vm = new Vue({
el: '#app',
data: {
user:{
name: "jack",
age: 20
}
},
watch:{
//侦听单个属性
'user.age': function(newval) {
console.log('age>>', newval);
},
'user.name': {
handler(newval){
console.log(newval);
},
}
},
})
- 面试问及
使用过侦听器吗 在vue中碰到过什么bug?
侦听器用来检测数据的改变,当侦听的那个数据发生改变后就会触发侦听器中的对应函数,一般我更多的使用是用在侦听路由的变化->重新获取数据(如果搜索在以应用的outer-view中显示对应用的数据),之前碰到一个坑点侦听器默认无法侦听复杂数据类型,侦听器默认情况下侦听的是数据内存地址后面用深度侦听deep:true 来解决这个问题,或者侦听精确到对象中的那个值也可
生命周期
生命周期: vue实例从创建->运行->销毁 所经过的一系列过程统称为生命周期!强调的是一个时间段
生命周期函数:是由 vue 框架提供的内置函数,会伴随着生命周期,自动按次序执行生命周期函数:是由 vue 框架提供的内置函数,会伴随着生命周期,自动按次序执行
注: 生命周期强调的是时间段,生命周期函数强调的是时间点
生命周期函数的分类
- 创建期间的生命周期钩子函数
beforeCreate:实例刚在内存中被创建出来,此时,还没有初始化好 data 和 methods 属性
created:实例已经在内存中创建OK,此时 data 和 methods 已经创建OK,此时还没有开始 编译模板
beforeMount:此时已经完成了模板的编译,但是还没有挂载到页面中
mounted:此时,已经将编译好的模板,挂载到了页面指定的容器中显示
- 运行期间的生命周期函数
beforeUpdate:状态更新之前执行此函数, 此时 data 中的状态值是最新的,但是界面上显示的 数据还是旧的,因为此时还没有开始重新渲染DOM节点
updated:实例更新完毕之后调用此函数,此时 data 中的状态值 和 界面上显示的数据,都已经完成了更新,界面已经被重新渲染好了!
- 销毁期间的生命周期函数
beforeDestroy:实例销毁之前调用。在这一步,实例仍然完全可用。
destroyed:Vue 实例销毁后调用。调用后,Vue 实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁。destroyed:Vue 实例销毁后调用。调用后,Vue 实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁。