关于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中<keep-alive>的作用?

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


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只在当前组件中起作用

将当前组件的<style>修改为<style scoped>


9.<keep-alive></keep-alive>的作用是什么?
<keep-alive></keep-alive> 包裹动态组件时,会缓存不活动的组件实例,主要用于保留组件状态或避免重新渲染。


10.指令v-el的作用是什么?

提供一个在页面上已存在的 DOM 元素作为 Vue 实例的挂载目标.可以是 CSS 选择器,也可以是一个 HTMLElement 实例


11.在Vue中使用插件的步骤

采用ES6的import ... from ...语法或CommonJSd的require()方法引入插件
使用全局方法Vue.use( plugin )使用插件,可以传入一个选项对象Vue.use(MyPlugin, { someOption: true })

12.active-class是哪个组件的属性?

vue-router模块的router-link组件。


13.怎么定义vue-router的动态路由以及如何获取传过来的动态参数?
在router目录下的index.js文件中,对path属性加上/:id
使用router对象的params.id


14.vue-router有哪几种导航钩子?

有三种

第一种:一种是全局导航钩子:router.beforeEach(to,from,next),作用:跳转前进行判断拦截。

第二种:组件内的钩子;
第三种:单独路由独享组件


15.为什么避免 v-if 和 v-for 用在一起

当 Vue 处理指令时,v-for 比 v-if 具有更高的优先级,通过v-if 移动到容器元素,不会再重复遍历列表中的每个值。取而代之的是,我们只检查它一次,且不会在 v-if 为否的时候运算 v-for


16.VNode是什么?虚拟 DOM是什么?
Vue在 页面上渲染的节点,及其子节点称为“虚拟节点 (Virtual Node)”,简写为“VNode”。“虚拟 DOM”是由 Vue 组件树建立起来的整个 VNode 树的称呼。


17.为什么使用key?

当有相同标签名的元素切换时,需要通过 key 特性设置唯一的值来标记以让 Vue 区分它们,否则 Vue 为了效率只会替换相同标签内部的内容。


18.vue-loader是什么?使用它的用途有哪些?

vue-loader是解析.vue文件的一个加载器。

用途:js可以写es6、style样式可以scss或less、template可以加jade等


19.scss是什么?在vue.cli中的安装使用步骤是?有哪几大特性?
答:scss是css的预编译。
使用步骤:
第一步:先装css-loader、node-loader、sass-loader等加载器模块
第二步:在build目录找到webpack.base.config.js,在那个extends属性中加一个拓展.scss
第三步:在同一个文件,配置一个module属性
第四步:然后在组件的style标签加上lang属性 ,例如:lang=”scss”
特性:
可以用变量,例如($变量名称=值);
可以用混合器,例如()
可以嵌套


本文链接:https://my.lmcjl.com/post/20916.html

展开阅读全文

4 评论

留下您的评论.