vue面试题
一、Vue.js是什么?
Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用提供驱动。
二、列举vue的常见指令
v-for 、 v-if 、v-bind、v-on、v-show、v-else
1.文本插值:{{}} Mustache
2.DOM属性绑定:v-bind
3.指令绑定一个事件监听器:v-on
{{message}}
逆转消息4.实现表单输入和应用状态之间的双向绑定:v-model
{{message}}
5.控制切换一个元素的显示:v-if和v-else
现在你看到我了
6.列表渲染:v-for
- {{todo.text}}
三、v-if 和 v-show 区别
v-if按照条件是否渲染,v-show是display的block或none
四、vue常用的修饰符?
prevent: 提交事件不再重载页面;
.stop: 阻止单击事件冒泡;
.self: 当事件发生在该元素本身而不是子元素的时候会触发;
.capture: 事件侦听,事件发生的时候会调用
五、vue.js的两个核心是什么?
数据驱动、组件系统
六、vue中 key 值的作用?
当 Vue.js 用 v-for 正在更新已渲染过的元素列表时,它默认用“就地复用”策略。如果数据项的顺序被改变,Vue 将不会移动 DOM 元素来匹配数据项的顺序, 而是简单复用此处每个元素,并且确保它在特定索引下显示已被渲染过的每个元素。key的作用主要是为了高效的更新虚拟DOM。
七、怎么定义 vue-router 的动态路由? 怎么获取传过来的值
在 router 目录下的 index.js 文件中,对 path 属性加上 /:id,使用 router 对象的 params.id 获取。
八、query和params的区别
query类似于ajax中get请求,params类似于post请求,前者在浏览器地址栏中显示参数,后者则不显示
如果路由跳转使用path,必须使用query方式传参,
如果使用name跳转,query和params可以使用query传参,参数可以保存,使用params传参,页面刷新后,参数不会保存
query要用path来引入,params要用name来引入,接收参数都是类似的,分别是this. r o u t e . q u e r y . n a m e 和 t h i s . route.query.name和this. route.query.name和this.route.params.name。
注意点:query刷新不会丢失query里面的数据
params刷新 会 丢失 params里面的数据。
九、Vue的生命周期
1.什么是vue的生命周期
vue实例从创建到销毁的过程,就是生命周期。从开始创建、初始化数据、编译模板、挂载Dom-渲染、更新→渲染、销毁等一系列过程,称之为 Vue 的生命周期。
2.vue生命周期的作用是什么?
它的生命周期中有多个事件钩子,让我们在控制整个vue实例的过程时更容易形成好的逻辑
3.第一次页面加载会触发哪几个钩子?
会触发 下面这几个beforeCreate, created, beforeMount, mounted 。
4.vue生命周期总共有几个阶段?
它可以总共分为8个阶段:创建前/后, 载入前/后,更新前/后,销毁前/销毁后。
5.DOM 渲染在 哪个周期中就已经完成?
DOM 渲染在 mounted 中就已经完成了。
十、对于MVVM的理解
MVVM 是 Model-View-ViewModel 的缩写。
Model代表数据模型,也可以在Model中定义数据修改和操作的业务逻辑。
View 代表UI 组件,它负责将数据模型转化成UI 展现出来。
ViewModel 监听模型数据的改变和控制视图行为、处理用户交互,简单理解就是一个同步View 和 Model的对象,连接Model和View。
viewmodel和model实现双向数据绑定
十一、vue中的路由拦截器的作用?
路由拦截,权限设置
例如:当用户没有登录权限的时候就会跳转到登录页面,用到的字段requireAuth:true
十二、axios的作用?
vue中的ajax,用于向后台发起请求
安装:npm install axios --save
特点:
- 从浏览器中创建XMLHttpRequests
- 从node.js创建http请求
- 支持Promise API
- 拦截请求和响应
- 转换请求数据和响应数据
- 取消请求
- 自动转换json数据
- 客户端支持防御XSRF
promise:
一个对象用来传递异步操作的信息
promise的出现主要是解决地狱回调的问题,无需多次嵌套
本质:分离异步数据获取和业务
拦截器分为请求拦截器和响应拦截器:
1.请求拦截器:
axios.interceptors.request.use(function(config){
return config;
},function(error){
return Promise.reject(error);
});
2.响应拦截器
axios.interceptors.response.use(function(response){
return response;
},function(error){
return Promise.reject(error);
});
十三、Vue的优点
轻量级框架:只关注视图层,是一个构建数据的视图集合,大小只有几十kb;
简单易学:国人开发,中文文档,不存在语言障碍 ,易于理解和学习;
双向数据绑定:保留了angular的特点,在数据操作方面更为简单;
组件化:保留了react的优点,实现了html的封装和重用,在构建单页面应用方面有着独特的优势;
视图,数据,结构分离:使数据的更改更为简单,不需要进行逻辑代码的修改,只需要操作数据就能完成相关操作;
虚拟DOM:dom操作是非常耗费性能的, 不再使用原生的dom操作节点,极大解放dom操作,但具体操作的还是dom不过是换了另一种方式;
运行速度更快:相比较与react而言,同样是操作虚拟dom,就性能而言,vue存在很大的优势。
十四、vue父组件向子组件传递数据?
通过props
十五、子组件像父组件传递事件?
$emit方法
十六、如何获取dom?
ref=“domName” 用法:this.$refs.domName
十七、如何让CSS只在当前组件中起作用?
在组件中的style前面加上scoped
十八、keep-alive的作用是什么?
keep-alive 是 Vue 内置的一个组件,可以使被包含的组件保留状态,或避免重新渲染。
十九、v-modal的使用
v-model用于表单数据的双向绑定,其实它就是一个语法糖,这个背后就做了两个操作:
v-bind绑定一个value属性;
v-on指令给当前元素绑定input事件。
二十、请说出vue.cli项目中src目录每个文件夹和文件的用法
assets文件夹是放静态资源;
components是放组件;
router是定义路由相关的配置;
app.vue是一个应用主组件;
main.js是入口文件。
二十一、分别简述computed和watch的使用场景
computed:
当一个属性受多个属性影响的时候就需要用到computed
最典型的栗子: 购物车商品结算的时候
watch:
当一条数据影响多条数据的时候就需要用watch
栗子:搜索数据
二十二、渐进式框架的理解
主张最少;可以根据不同的需求选择不同的层级
二十三、引进组件的步骤
在template中引入组件;
在script的第一行用import引入路径;
用component中写上组件名称。
二十四、vue slot是什么?
简单来说,假如父组件需要在子组件内放一些DOM,那么这些DOM是显示、不显示、在哪个地方显示、如何显示,就是slot分发负责的活。
二十五、vue常用的UI组件库
Vant elementUI
二十六、$route 和 $router 的区别
r o u t e r 是 V u e R o u t e r 的 实 例 , 在 s c r i p t 标 签 中 想 要 导 航 到 不 同 的 U R L , 使 用 router是VueRouter的实例,在script标签中想要导航到不同的URL,使用 router是VueRouter的实例,在script标签中想要导航到不同的URL,使用router.push方法。返回上一个历史history用$router.to(-1)
二十七、vue-router的两种模式
hash模式:即地址栏 URL 中的 # 符号;
history模式:window.history对象打印出来可以看到里边提供的方法和记录长度。利用了 HTML5 History Interface 中新增的 pushState() 和 replaceState() 方法。(需要特定浏览器支持)。
二十八、Vuex概念
Vuex是为Vue.js应用程序提供的一套状态管理工具,使用了集中式管理的模式,对应用内所有组件的状态进行管理。
二十九、Vuex核心属性
Vuex中的5个核心属性:
- state:用于保存基本数据
- mutations:用于声明操作基本属性的函数,同步操作
- actions:用于声明操作mutations的函数,异步操作
- getters:根据基本数据派生出更加复杂的数据
- modules:用于模块化操作
三十、Vuex解决了什么问题?
- 多个组件依赖于同一状态时,对于多层嵌套的组件的传参将会非常繁琐,并且对于兄弟组件间的状态传递无能为力。
- 来自不同组件的行为需要变更同一状态。以往采用父子组件直接引用或者通过事件来变更和同步状态的多份拷贝。以上的这些模式非常脆弱,通常会导致无法维护的代码。
三十一、在Vuex中使用mutation要注意什么。
mutation 必须是同步函数