vue 面试题
2018-07-23 本文已影响168人
虚蕪面孔
1.vue的虚拟dom
虚拟的DOM的核心思想是:对复杂的文档DOM结构,提供一种方便的工具,进行最小化地DOM操作。
2.如何理解vue中MVVM模式
MVVM全称是Model-View-ViewModel;vue是以数据为驱动的,一旦创建dom和数据就保持同步,每当数据发生变化时,dom也会变化。DOMListeners和DataBindings是实现双向绑定的关键。DOMListeners监听页面所有View层DOM元素的变化,当发生变化,Model层的数据随之变化;DataBindings监听Model层的数据,当数据发生变化,View层的DOM元素随之变化。
3.vue中<keep-alive>的作用
- <keep-alive>是Vue的内置组件,能在组件切换过程中将状态保留在内存中,防止重复渲染DOM。 把切换出去的组件保留在缓存中,可以保留组件的状态或者避免重新渲染。
- <keep-alive>包裹动态组件时,会缓存不活动的组件实例,而不是销毁它们。和 <transition> 相似,<keep-alive> 是一个抽象组件:它自身不会渲染一个 DOM 元素,也不会出现在父组件链中。
prop:
- include: 字符串或正则表达式。只有匹配的组件会被缓存。
- exclude: 字符串或正则表达式。任何匹配的组件都不会被缓存。
<keep-alive include="test-keep-alive">
<!-- 将缓存name为test-keep-alive的组件 -->
<component></component>
</keep-alive>
<keep-alive include="a,b">
<!-- 将缓存name为a或者b的组件,结合动态组件使用 -->
<component :is="view"></component>
</keep-alive>
<!-- 使用正则表达式,需使用v-bind -->
<keep-alive :include="/a|b/">
<component :is="view"></component>
</keep-alive>
<!-- 动态判断 -->
<keep-alive :include="includedComponents">
<router-view></router-view>
</keep-alive>
<keep-alive exclude="test-keep-alive">
<!-- 将不缓存name为test-keep-alive的组件 -->
<component></component>
</keep-alive>
结合router,缓存部分页面
使用$route.meta的keepAlive属性:
需要在router中设置router的元信息meta
//...router.js
export default new Router({
routes: [
{
path: '/',
name: 'Hello',
component: Hello,
meta: {
keepAlive: false // 不需要缓存
}
},
{
path: '/page1',
name: 'Page1',
component: Page1,
meta: {
keepAlive: true // 需要被缓存
}
}
]
})
使用
<keep-alive>
<router-view v-if="$route.meta.keepAlive"></router-view>
</keep-alive>
<router-view v-if="!$route.meta.keepAlive"></router-view>
4.vue生命周期的理解
![](https://img.haomeiwen.com/i7343059/ef0180416c5522e4.png)
Name | Academy |
---|---|
beforeCreate----创建前 | 组件实例更被创建,组件属性计算之前,数据对象data都为undefined,未初始化。 |
created----创建后 | 组件实例创建完成,属性已经绑定,数据对象data已存在,但dom未生成,$el未存在 |
beforeMount---挂载前 | vue实例的$el和data都已初始化,挂载之前为虚拟的dom节点,data.message未替换 |
mounted-----挂载后 | vue实例挂载完成,data.message成功渲染。 |
beforeUpdate----更新前 | 当data变化时,会触发beforeUpdate方法 |
updated----更新后 | 当data变化时,会触发updated方法 |
beforeDestory---销毁前 | 组件销毁之前调用 |
destoryed---销毁后 | 组件销毁之后调用,对data的改变不会再触发周期函数,vue实例已解除事件监听和dom绑定,但dom结构依然存在 |