关于VUE常会问到的部分面试题

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中的作用?

    把切换出去的组件保留在缓存中,可以保留组件的状态或者避免重新渲染。

 

4.vue生命周期的理解?

    (1)什么是vue生命周期: Vue 实例从创建到销毁的过程,就是生命周期。也就是从开始创建、初始化数据、编译模板、挂载Dom→渲染、更新→渲染、卸载等一系列过程,我们称这是 Vue 的生命周期。

    (2)vue生命周期的作用: 它的生命周期中有多个事件钩子,让我们在控制整个Vue实例的过程时更容易形成好的逻辑。

    (3)vue生命周期总共有几个阶段: 总共分为8个阶段:创建前/后, 载入前/后,更新前/后,销毁前/销毁后。

    (4)第一次页面加载会触发哪几个钩子: 第一次页面加载时会触发 beforeCreate, created, beforeMount, mounted 这几个钩子。

    (5)DOM 渲染在哪个周期中就已经完成: DOM 渲染在 mounted 中就已经完成了。

 

总共分为8个阶段:

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结构依然存在 

 

5.组件之间的传值通信?
父组件向子组件传值:
    1)子组件在props中创建一个属性,用来接收父组件传过来的值;
    2)在父组件中注册子组件;
    3)在子组件标签中添加子组件props中创建的属性;
    4)把需要传给子组件的值赋给该属性
子组件向父组件传值:
    1)子组件中需要以某种方式(如点击事件)的方法来触发一个自定义的事件;
    2)将需要传的值作为$emit的第二个参数,该值将作为实参传给响应事件的方法;

    3)在父组件中注册子组件并在子组件标签上绑定自定义事件的监听。

 

6.vue的优点是什么?

    低耦合:视图(View)可以独立于Model变化和修改,一个ViewModel可以绑定到不同的"View"上,当View变化的时候Model可以不变,当Model变化的时候View也可以不变。 
    可重用性:你可以把一些视图逻辑放在一个ViewModel里面,让很多view重用这段视图逻辑。 
    独立开发:开发人员可以专注于业务逻辑和数据的开发(ViewModel),设计人员可以专注于页面设计。 
    可测试:界面素来是比较难于测试的,而现在测试可以针对ViewModel来写。

 

7.v-show和v-if指令的共同点和不同点

    v-show指令是通过修改元素的display的CSS属性让其显示或者隐藏

    v-if指令是直接销毁和重建DOM达到让元素显示和隐藏的效果

 

8.如何让CSS只在当前组件中起作用

    将当前组件的