分享十道前端面试题 vue2篇

1.vue生命周期相关

1.1什么是vue生命周期?

    vue实例从创建到销毁的整个过程就是vue生命周期,通过vue生命周期可以在不同阶段进行不同的逻辑操作。

1.2vue生命周期有哪些钩子函数?该如何触发?

     vue生命周期常用的钩子函数一共有8个,分别是

   创建阶段:

beforeCreate =>实例创建之前,什么也不能用
created => 实例创建之后  可以使用data或者methods的钩子函数
beforeMount => 组件挂载之前
mounted => 组件挂载之后

    运行阶段: 

   beforeupdate => 数据变了,视图还没改变
   updated => 数据变了,视图也改变

    销毁阶段:   

beforedestory => 组件销毁之前,是最后一个能使用data和  methods钩子函数
destoryed => 组件销毁之后

    除了这八个,还有三个(不常用)

    如果用keep-alive缓存了组件,会新增了两个钩子函数:activated和deactivated   

activated => 组件激活
deactivated => 组件停用
errorCaptured => 子组件出错的时候会触发这个钩子函数

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

    我经常用到的有created和mounted,在里面发送http请求

    created和mounted的区别就是created比mounted执行的时间更早,所以更多的会在created中请求,mounted的特点是可以操作dom节点,也会用created来获取本地存储的数据

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

页面—beforeCreate
页面—created
页面—beforeMount
组件—beforeCreate
组件—created
组件—beforeMount
组件—mounted
页面—mounted

2. 对vuex的理解? 

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

        vuex其实就是vue官⽅给我们提供的⼀个状态管理⼯具,通过vuex我们可以实现组件之间数据共享

2.2 vuex的五⼤核⼼是什么?

state:保存状态,存放数据
getters:相当于计算属性
mutations:修改state里面的数据,只能进行同步操作
actions:可以改变state的状态,定义的方法可以进行异步操作
modules:进行模块化处理

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

state:通过this.$store.state来调用

getters:通过this.$store.getters来调用

mutations:通过this.$store.commit调用

actions:用过this.$store.dispath调用

modules:模块化

2.4 vuex的执⾏机制是什么?

在项目中如果要改变state的状态,我们一般都是在组件里面调用this.$store.dispath方式来触发actions里面的方法,在actions里面的方法通过commit来调用mutations里面定义的方法来改变state,这也是vuex的执行机制

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

在刷新页面的时候vuex的数据会丢失,可以通过本地存储或者安装vuex持久化插件vuex-persist去实现自动本地存储

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

vue的路由模式一共分为两种,分别是hash和history,他们的区别是hash模式不会包含在http请求中,并且hash不会重新加载页面,而使用history模式的话,如果前端的url和后端发起请求的url不一致的话会报404错误,所以使用history模块的话我们需要和后端进行配合.

        history的原理就是利用html5新增的两个特性方法,分别是pushState和replaceState来完成的.

4.vue路由守卫?讲解页面权限

        路由的导航守卫又叫做路由的钩子函数(生命周期函数),就是在跳转页面的时候拦下来,做一些操作,再放行

一共分为三种:

第一种是全局守卫:

beforeEach 路由进入之前

afterEach 路由进入之后

第二种是组件内守卫

beforeRouteEnter 路由进入之前

beforeRouteUpdate 路由更新之前

beforeRouteLeave 路由离开之前

第三种是独享守卫

beforeEnter 路由进入之前

        比如说购物车页面只有登录后才能访问,我们可以使用组件守卫,守卫购物车页面,跳转的时候先判断,判断有没有登录时存入的token,有的话就放行,没有的话就跳转到登录页面

5.v-if和v-show的区别?

他们两个都是控制元素的显示与隐藏,不过v-if控制元素隐藏的时候会删除对应的dom元素,当控制显示的时候会重新创建dom和渲染;v-show是通过css的display:none和display:block来控制元素的显示和隐藏,所以涉及到频繁显示隐藏的操作建议用v-show,不频繁操作的可以用v-if

6.v-for和v-if的哪个优先级高?如果同时用的话怎么解决?

v-for的优先级高,因为v-for的时候才开始渲染dom元素,v-if还无法进行判断

v-for和v-if不能同时使用,同时用的话vue会提示v-if应该放到外层去

 7.methods、computed和watch的区别?讲解

methods是用来定义方法的区域,methods定义的方法需要调用才能触发,不具备缓存

而computed是计算属性,依赖于属性值的变化,当属性值发生改变的时候,计算属性里面定义的方法就会出发,具有缓存性,根据属性值的变化而变化

watch主要用于监听,不具备缓存性,依赖于数据变化而变化

在项目中,比如我们获取state的状态的时候会把它放到computed里面,或者在写购物车数量计算的时候也会使用计算属性

watch也在项目中经常使用,比如我们封装编辑和新增弹窗组件的时候会通过watch来进行id判断我们是否要清空表单的数据

 8.vue组件通信?eventBus讲解

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

子传父   子组件通过this.$emit('自定义的事件',要传给父组件的数据),父组件通过子组件标签监听自定义的事件,通过方法来接收传递的数据

非父子组件通信

通过中央事件总线,我们称之为eventBus

我们需要创建一个空的js文件,在这个文件里面创建空的vue实例,然后导出这个空的vue实例,通过实例对象调用.on方法进行接收,通过emit方法来进行发送,以上就是非父子组件通信的方式

9.$nextTick方法有什么作用?讲解

nextTick也叫做异步更新队列方法,而nextTick方法的主要作用就是等待dom元素加载完毕之后才会执行的回调函数,我们经常在nextTick方法里面获取dom元素

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

MVVM是把MVC的Controller和MVP的Presenter改成了ViewModel

View的变化会自动更新到ViewModel,ViewModel的变化也会自动同步到View上显示,这种自动同步是因为ViewModel中的属性实现了Observer,当属性变更时都能触发对应的操作

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值