vue2.0面试题

273 阅读2分钟

面试题技巧:按自己思路背,答完题目需求后,按自己理解给自己扩展两个小案例,比如用在什么地方有什么好处,或者注意事项。

一.vue生命周期?

1.1什么是vue生命周期?

  vue生命周期就是vue的实例从出生到死亡的整个过程我们称之为vue的生命周期,

1.2vue生命周期有哪些钩子函数?这些钩子函数如何触发? vue生命周期函数有八个,分别是:

  创建前beforecreate 
  
  创建后created
  
  挂载前beforemount
  
  挂载后mounted
  
  更新前beforeUpdate
  
  更新后updated
  
  销毁前beforedestory
  
  销毁后**destoryed **
  

1.3项目开发过程中,在生命周期里面都能做什么功能?

在项目开发过程中我们常用的钩子函数有created,经常在created进行数据请求,或
者获取本地储存的数据,还有一些其他的操作,除了created还有mounted,我们经常
在mounter里面获取dom元素,有时获取不到dom元素我们一般用$nextTick方法来解
决

1.4 页面第一次加载时,父子组件生命周期执行的顺序是什么?

 页面一开始加载的时候就会触发创建前后和挂载前后的钩子,而更新的钩子需要当
 我们改变data的时候才能触发,比如点击按钮执行一个方法,在这个方法里给data
 的属性进行赋值操作,这时候就会更新的钩子函数,销毁的钩子函数必须当组件进
 行切换的时候就会进行销毁,

二.vuex 的理解

2.1什么是vuex 使用vuex能解决什么问题?

 vuex就是vue官方给我们提供的一个状态管理工具,通过vuex我们可以解决组件数据
 直接共享问题

2.2vuex的五大核心是什么?

 vuex一共有5大核心分别是state 存数据状态,getters用来获取state里面的状
 态,并且可以对state的数据进行处理之后在返回,类似vue的计算属性,mutations 是方法,
 它的作用就是用来修改state里面的数据,不过mutations里面
 只能进行同步的操作,actions,可以去改变state的状态,不过在actions里面定
 义的方法可以进行异步操作。

2.3在组件里面如何调用五大核心的属性和方法

调用state里面的状态有两种方式一种通过this实例,一种映射方式。

通过this实例获取数据,this.state.state,获取state数据,
this.satte.getter获取计算属性,
this.state.mutations 获取方法,里面的方法通过,this.state.commit触发,
调用actions里面的方法可以通过this.$store.dispatch来进行触发。

映射方式通过:
import {mapState,mapMutations,mapGetters,mapActions,} from 'vuex'

2.4vuex的执行机制是什么?

在项目中我们如果要改变state的状态我们可以在组件内调用
this.$store.dispatch方式来触发actions的方法,再actions里面的方法通过
commit来调用,mutations的方法,在mutations中改变state的数据,
这就是vuex的执行机制

2.5vuex的弊端是什么?怎么解决?

刷新浏览器的时候vuex的数据会丢失,我们一般使用localstorage本地储存或者vue的持久化,
在项目中我们可以通过vuex保存用户的信息和token值,一级其他状态,以上就是我对vuex的理解

三.vue路由有几种模式,有什么区别?原理是什么?

vue路由模式有两种,第一种是哈希hash模式和history模式,他们区别是,哈希模式
不会包含在http请求,并且哈希不会重新加载页面,而是用history模式的话,如果
前端的url和后端发起请求的url不一致,会报404错误,所以history模块我们需要
和后端进行配合。
history原理是利用h5新增的两个特性方法,分别是psuhState和replaceState来完
成,以上就是我对vue路由模式的理解

四.路由守卫

vue路由守卫就是当我们进行页面跳转时触发的钩子函数,我们称之为路由守卫,路由守卫分三
种,一种全局守卫,一种组件内守卫,一种独享守卫,独享守卫是写在路由内,不管全局,组件
还是独享,都会有beforeEach,beforeResove,afterEach 分别代表的意思,路由跳转前触发
的钩子,进入路由触发的钩子,进入路由之后触发的钩子,每个钩子函数内都有一个回调函数,
每个回调函数都有三个参数,分别是to,from,next分别对应的是要进入的路由,离开之前的路
由,以及进入后。

在项目中我们经常用路由守卫获取token值,当页面进行跳转时,我们会在路由守卫中获取vuex
的token如果token存在则next放行,如果不存在就next让他回到login页面以上就是我对路由守
卫的理解

五.v-if和v-show的区别

v-if和v-show都是通过控制元素的显示隐藏,只不过v-if控制元素显示隐藏时是通过删除dom元
素显示时再创建dom元素,而v-show则是通过css
的display:none来控制显示隐藏,v-if比较消耗性能,如果要频繁显示隐藏可以使用v-show,
如果不是频繁显示隐藏可以使用v-if
在项目中我们经常使用v-if和v-show比如编辑和完成时,使用v-show来切换两个按钮的显示和
隐藏,这就是我对v-if和v-show的理解

六.v-for和v-if的优先级哪个更高?如果要同时使用,v-for,v-if怎么解决?

v-for的优先级更高,因为v-for的时候我们才刚刚开始渲染dom元素,这时v-if还无法进行判断
v-for和v-if不能同时使用(不能连用),,我们可以通过标签比如div进行包裹,然后把v-if写到包裹的标签上
面。写到v-for外层的标签上即可

七.methods,computed,watch区别?讲解

首先,methods是用来定义方法的区域,methods定义的方法需要调用才触发,不具备缓存,
而computed是计算属性,依赖属性值进行变化,当属性改变计算属性内的方法就会触发,
computed具有缓存性,依赖属性值的变化而变化
watch是监听,不具备缓存性,依赖于数据变化而触发,在项目中,比如我们获取state的状态时
我们会把他放到computed里面,或者写在购物车数量计算的时候也会使用计算属性。

八.vue组件通信。eventBus讲解

父传子,在子组件标签上绑定属性,子组件通过props来接收,可以通过数组或对象方式进行接收
,如果父组件没有传递属性,子组件可以default来设置默认值

子传父,子组件通过this.$emit(数据名,数据)触发一个方法,然后父组件页面通过
@数据名=“方法($event)” $event就是接受到的数据

非父子组件通信
通过中央事件总线,我们也称为eventBus,首先创建一个空js文件,在这个文件中创建空的vue
实例,然后导出这个vue实例,通过实例对象调动。on方法进行接受,通过emit方法来进行发
送,以上就是非父子组件通信的方式

九.$nextTick方法有什么作用?

nextTick是异步更新队列方法,nextTick方法主要作用就是等待dom元素加载完成之后才会执行
的回调函数,可以通过nextTick方法获取dom元素

十.说一下什么是mvvm模式?

MVVM模式是把MVC和MVP的数据和视图(Presenter)修改成了ViewModel。
View发生改变会更新到ViewModel上,ViewModel发生改变会更新到View上。
这种自动更新的模式是因为ViewModel属性实现了Observe,当属性变更时都能触发对应的操作