Vue核心基础(二)

56 阅读4分钟

修饰符

事件修饰符

.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 框架提供的内置函数,会伴随着生命周期,自动按次序执行

注: 生命周期强调的是时间段,生命周期函数强调的是时间点

生命周期函数的分类

图像 (2).png

  • 创建期间的生命周期钩子函数

beforeCreate:实例刚在内存中被创建出来,此时,还没有初始化好 data 和 methods 属性

created:实例已经在内存中创建OK,此时 data 和 methods 已经创建OK,此时还没有开始 编译模板

beforeMount:此时已经完成了模板的编译,但是还没有挂载到页面中

mounted:此时,已经将编译好的模板,挂载到了页面指定的容器中显示

  • 运行期间的生命周期函数

beforeUpdate:状态更新之前执行此函数, 此时 data 中的状态值是最新的,但是界面上显示的 数据还是旧的,因为此时还没有开始重新渲染DOM节点

updated:实例更新完毕之后调用此函数,此时 data 中的状态值 和 界面上显示的数据,都已经完成了更新,界面已经被重新渲染好了!

  • 销毁期间的生命周期函数

beforeDestroy:实例销毁之前调用。在这一步,实例仍然完全可用。

destroyed:Vue 实例销毁后调用。调用后,Vue 实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁。destroyed:Vue 实例销毁后调用。调用后,Vue 实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁。

生命周期图示

图像.png