1.v-show 和 v-if 区别
答 v-show 只是隐藏和显示dom v-if会删除和创建dom
2.v-for 中key的作用
答: key一般要写唯一标识,有id用id没id用下标,利用diff算法当数组发生变化的时候会重新创建dom树,然后用key作为标识来对照旧的dom树,只修改有变化的,提高了性能
3.vue中data为什么是function
为了保证数据的独立性,如果是对象类型,那么如果组件被多个实例同时引用会导致多个实例使用同一个对象,会导致数据混乱
4.vue中双向绑定的原理
使用v-model进行数据的双向绑定,也称为mvvm,通过发布者-订阅者的方式来实现的,在数据发生变化会告知订阅者是否要更新,如果要更新就会执行更新
5.keep-alive的作⽤和被keep-alive声明的组件的⽣命周期
表示组件持久化,被keep-alive包含的组件都会持久化,不会频繁的被创建和销毁
6.说一下vue的生命周期,以及生命周期都做了什么事情?
beforeCreate :在初始化实例之前,一般不做操作 created:Vue 实例化完成,属性也绑定了,但是dom元素还没生成 beforemount:编译模板,调用render 生成vdom,只是在js层面,未转化成DOM mounted:dom加载完成 beforeUpdate:data数据发生变化,更新之前 updated: data 发生变化,更新之后 beforeUnmount:组件开始进入销毁 unmounted:组件被销毁
7.vue什么时候操作DOM 比较合适?操作时发现有的组件获取不到,怎么办?
可以使用$nexttick,表示等待dom元素更新完成之后再执行
8.发送网络请求在哪个函数中?
使用axios来异步发送请求数据一般使用async和await来处理异步需要等待的问题
9.vue组件间传值有哪些⽅式
父传子:父组件传值,子组件在props中接受父组件传过来的数据
子传父:子组件通过$emit来向父组件传值,父组件通过自定义事件名的方式来接受子组件穿过来的值
兄弟之间传值:可以使用eventBus来跨组件传值,发送方使用eventBus.on来监听事件从而来完成跨组件传值
10.vue中改变数组内索引的值,数据不更新,如何处理
因为vue不能检测数组和对象的变化,只有一些被包裹的方法可以触发视图更新,也可以直接使用新数组替换旧的数组
11.讲一下vuex--
vuex主要解决了vue各个组件之间数据共享的问题,数据一般存在state中,mutations用来修改数据,但是不能做异步,异步统一在actions里面进行处理,但是actions不能直接修改数据还是需要找mutations中的方法进行对数据的修改操作
12.计算属性和侦听器的区别
计算属性是自动监听依赖值的变化,从而动态返回内容,监听是一个过程,在监听的值变化时,可以触发一个回调,并做一些事情。侦听属性watch中可以执行代码逻辑,如函数节流,Ajax异步获取数据,甚至操作 DOM
13.组件插槽
用于实现组件的内容分发, 通过 slot 标签, 可以接收到写在组件标签内的内容
在封装组件时,把不确定的部分定义为插槽然后再使用组件的时候传需要传入的数据就可以了
14.具名插槽
当一个组件内有多处以上需要外部传入标签的地方,可以使用具名插槽
slot的name属性起插槽名, 使用组件时, 通过v-slot的值来确定使用那一个插槽
15.动态组件
多个组件使用同一个挂载点,通过导入多个组件并动态切换,这就是动态组件