Vue面试题

一:什么是MVVM

MVVM是是Model-View-ViewModel的缩写,Model代表数据模型,定义数据操作的业务逻辑,View代表视图层,负责将数据模型渲染到页面上,ViewModel通过双向绑定把View和Model进行同步交互,不需要手动操作DOM的一种设计思想。

二:MVVM和MVC区别?和其他框架(jquery)区别?那些场景适用?

MVVM和MVC都是一种设计思想,主要就是MVC中的Controller演变成ViewModel,,MVVM主要通过数据来显示视图层而不是操作节点,解决了MVC中大量的DOM操作使页面渲染性能降低,加载速度慢,影响用户体验问题。主要用于数据操作比较多的场景。

三:Vue的优缺点是什么

优点:低耦合,可重用性,独立开发,可测试,渐进式

缺点:不利于SEO,社区维护力度不强,相比还不够成熟

三:组件之间传值

父向子传值:属性传值,父组件通过给子组件标签上定义属性,子组件通过props方法接收数据;

子向父传值:事件传值,子组件通过$emit(‘自定义事件名’,值),父组件通过子组件上的@自定义事件名=“函数”接收

非父子组件传值:全局定义bus,var bus=new Vue() ; 发送者, bus.$emit(‘自定义名’,值) ;接受者,bus.$on(‘自定义名’,(值)=>{})

四:路由之间传参

路由字典中:routes={path:’/detail/:id’,component:Detail}

标签中:<router-link :to=”‘/detail/’+item.id ”>

Js中:this.$route.params.id

五:axios的特点和使用

特点:基于promise的Http库,支持promise的所有API,用来请求和响应数据的,而且对响应回来的数据自动转化为json类型,安全性较高,客户端支持防御XRSF(跨站请求伪造),默认不携带cookie;

使用:下载包后引入 import axios from ‘axios’ , 让其携带cookie ,axios.defaults.withCredentials=true, 然后添加到prototype中,Vue.prototype.$axios=axios ,组建中不用引入直接使用this.$axios.get(url,{params:{id:1}})。

六:Vuex是什么?怎么使用?用于哪些场景?

Vuex是框架中状态管理;新建目录store...export,然后main.js引入store再注入到vue实例中;用于购物车,登录状态,单页应用等。

七:Vuex有哪几种属性?

五种:state,action,mutation,getter,module

State:数据源存放地,数据是响应式的

Action: 逻辑处理,提交的是mutation,包含任意异步操作

Mutation: 修改state里的公共数据

Getter: 相当于计算属性,可以复用,可缓存

Module: 模块化

八:Vuex取值

This.$store.state.city

This.$store.commit(‘getData’)

this.$store.dispath(‘getData’)

This.$store.getters.getData

九:不使用vuex会带来什么问题?

可维护性下降,可读性下降,增加耦合

十:v-show和v-if指令的共同点和不同点

V-show指令是通过修改元素的display的css样式使其显示隐藏

V-if指令是销毁和重建DOM达到让元素显示隐藏

十一:如何让css只在当前组件中起作用?

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

十二:<keep-alive></keep-alive>的作用是什么,如何使用?

包裹动态组件时,会缓存不活动的组件实例,主要用于保留组件状态或避免重新渲染;

使用:简单页面时

缓存:  <keep-alive include=”组件名”></keep-alive>

不缓存:<keep-alive exclude=”组件名”></keep-alive>

使用:复杂项目时

路由字典中定义{path:’/detail’,meta:{keepAlive:false/true}} 是否缓存

根目录中:

<keep-alive><router-view v-if=”$route.meta.keepAlive”></router-view></keep-alive>

<keep-alive><router-view v-if=” ! $route.meta.keepAlive”></router-view></keep-alive>

十三:Vue数据双向绑定原理

Vue数据双向绑定是通过数据劫持结合发布者-订阅者模式方式来实现的,语法主要有{{}}和v-model。首先用递归方法遍历所有的属性值,再用Object.defineProperty()给属性绑定getter和setter方法添加一个observe(val)监听器对数据进行劫持监听;然后创建一个订阅器来在getter里收集订阅者并创建和绑定watcher,如果数据变化,订阅者就会执行自己对应的更新函数;watcher就是在自身实例化的时候往订阅器里添加自己,自身必须有一个update的数据,是监听器和模板渲染的通信桥梁;最后创建解析模板指令compile,替换数据,初始化视图。最终observer来监听自己的model数据变化通过compile解析编译模板指令,利用watcher搭起observer和compile之间的通信桥梁,达到数据变化->视图更新双向绑定效果。

十四:Vue生命周期

vue生命周期就是从开始创建,初始化数据,编译模板,挂载DOM,渲染->更新->渲染,销毁等一系列过程。生命周期钩子如下:

组件实例周期:

BeforeCreate:实例初始化后,无法访问方法和数据;

Created:实例创建完成,可访问数据和方法,注意,假如有某些数据必须获取才允许进入页面的话,并不适合;

beforeMonut:挂载DOM之前

Mounted :el被新创建的vm.$el替换,可获取dom,改变data,注意,beforeRouterEnter的next的钩子比mountend触发靠后;

beforeUpdate:数据更新时调用,发生在虚拟DOM重新渲染前;

Updated:数据更改后,可以执行依赖于DOM的操作,注意,应该避免在此期间更改状态,可能会导致更新无限循环;

beforeDestroy:实例销毁之前,这一步还可以用this获取实例,一般在这一步做重置操作,比如清定时器监听dom事件;

Destroyed:实例销毁后,会解除绑定,移除监听。

十五:路由钩子

全局路由钩子:

Router.beforeEach((to,from,next)=>{... next()})

注意:一定要调用next(),否则页面卡在那,一般用于对路由跳转前进行拦截,参数:

To:即将要进入的目标路由对象    From:当前导航正要离开的路由

Next():跳转下一个页面      next(‘/path’):跳转指定路由

Next(false):返回原来页面  next((vm)=>{}):且在beforeRouterEnter用

比如根据登录状态跳转页面判断(to.name->name是路由名)

Router.beforeEach(function(to,from,next){if(to.name==’login’){..}next();})

Router.afterEach((to,from)=>{}) 跳转后调用没有next方法

组件路有钩子:

beforeRouteEnter(to,from,next){next(vm=>{...})} 路由跳转时

注意:此钩子在beforeCreate之前执行,但是next在组件mounted周期之后,无法直接调用this访问组件实例,可用next访问vm实例,修改数据;

beforeRouteLeave(to,from,next){...next()} 离开路由时

注意:可以直接访问this,next不可回调

beforeRouteUpdate 路由切换时

十六:指令周期

Bind:一次初始化调用          inserted:被绑定元素插入父节点调用

Update:模板更新调用         unbind:指令与元素解绑时

Vue.nextTick:在dom更新后执行,一般用于dom操作

Vue.$nextTick:一直到真实的dom渲染结束后执行

Ex:created(){this.$nextTick(()=>{...})}

十七:生命周期的作用是什么?

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

十八:第一次加载会触发哪几个钩子?

会触发beforeCreate , created ,beforeMount ,mounted

十九:说出至少4种vue当中的指令和用法?

V-if:判断是否隐藏         v-for:数据循环                v-bind:绑定属性

v-model:双向绑定          v-is:动态组件特殊特性 v-on:事件绑定

二十:vue-loader是什么?用途有哪些?

是解析vue文件的一个加载器,用途是js可以写es6,style样式可以scss或less,template可以加jade

二十一:active-class是那个组件属性?

Vue-router模块的router-link组件,设置激活时样式

二十二:vue中使用插件的步骤是什么?

Inport ... from ... 引入插件,Vue.use(...)全局注册

二十三:为什么使用key?

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

二十三:为什么避免v-if和v-for用在一起?

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

二十四:VNode是什么?虚拟DOM是什么?

Vue在页面上渲染的节点,及其子节点称为虚拟节点,简称VNode;虚拟DOM时由组件树建立起来的整个VNode树的称呼

二十五:scss是什么?有哪些特性?怎么使用?

是css的预编译,特新有可以用变量($变量名=值),可以用混合器(),可以嵌套,可以继承,可以运算,安装先装css-loader,node-loader,sass-loader,在webpack.base配置,style标签上加lang=”scss”

二十五:Vue router如何实现跳转

<router-link></router-link>   router.push(‘/’)      router.go(0)

二十六:vue router跳转和location.href有什么区别?

Router是hash改变;location.href是页面跳转,刷新页面

二十七:v-model原理

<input v-model="sth">

==相当于通过oninput(用户输入时触发)把表单值给到变量

<input v-bind:value="sth" v-on:input="sth=$event.target.value">

二十八:vue的template的理解

通过compile编译template生成AST语法树,AST语法树经过generate转化为render function字符串后返回虚拟DOM节点(Vnode)的过程

二十九:vue和react区别

相同点:

都鼓励组件化,都有’props’的概念,都有自己的构建工具,Reat与Vue只有框架的骨架,其他的功能如路由、状态管理等是框架分离的组件。

不同点:

React:数据流单向,语法—JSX,在React中你需要使用setState()方法去更新状态

Vue:数据双向绑定,语法--HTML,state对象并不是必须的,数据由data属性在Vue对象中进行管理。适用于小型应用,但对于对于大型应用而言不太适合。

三十:单页面和多页面的区别

单页面:

整个项目中只有一个完整的HTML页面,其它"页面"只是一段HTML片断而已

优: 请求少

缺: 不利于搜索引擎优化

页面跳转本质:把当前DOM树中某个DIV删除,下载并挂载另一个div片断

多页面:

项目中有多个独立的完整的HTML页面

缺: 请求次数多,效率低

页面跳转本质:

删除旧的DOM树,重新下载新的DOM树

三十一:Vue的SPA如何优化加载速度

减少入口文件体积,静态资源本地缓存,开启Gzip压缩,使用SSR,nuxt.js

三十二:Axios发送post请求

Import qs from ‘qs’

Var data=qs.stringify({

Number : ’1’

})

Axios.post(url,data).then()

VUE如何自定义属性

全局自定义:

Vue.directive(‘focus’,{

Inserted:function(el){

el.focus()  //聚焦函数

}

})

三十三:组件自定义

directive{

inserted:function(el){

el.focus()

}

}

三十四:Vue和vuex 有什么区别

Vue是框架,vuex是插件,vuex是专门为vue应用程序开发的状态管理模式

三十五:.Vuex中actions和mutations的区别

Mutations的更改是同步更改,用于用户执行直接数据更改,this.$store.commit(‘名’)触发

Actions的更改是异步操作,用于需要与后端交互的数据更改,this.$store.dispath(“名”)触发

注意:

1):定义actions方法创建一个更改函数时,这个函数必须携带一个context参数,用于触发mutations方法,context.commit(‘修改函数名’ , ’异步请求值’);

2):mutations第一个参数必须传入state,第二个参数是新值

2018VUE面试题总结的更多相关文章

  1. .NET面试题系列[8] - 泛型

    “可变性是以一种类型安全的方式,将一个对象作为另一个对象来使用.“ - Jon Skeet .NET面试题系列目录 .NET面试题系列[1] - .NET框架基础知识(1) .NET面试题系列[2] ...

  2. 关于面试题 Array.indexof() 方法的实现及思考

    这是我在面试大公司时碰到的一个笔试题,当时自己云里雾里的胡写了一番,回头也曾思考过,最终没实现也就不了了之了. 昨天看到有网友说面试中也碰到过这个问题,我就重新思考了这个问题的实现方法. 对于想进大公 ...

  3. 对Thoughtworks的有趣笔试题实践

    记得2014年在网上看到Thoughtworks的一道笔试题,当时觉得挺有意思,但是没动手去写.这几天又在网上看到了,于是我抽了一点时间写了下,我把程序运行的结果跟网上的答案对了一下,应该是对的,但是 ...

  4. 从阿里巴巴笔试题看Java加载顺序

    一.阿里巴巴笔试题: public class T implements Cloneable { public static int k = 0; public static T t1 = new T ...

  5. JAVA面试题

    在这里我将收录我面试过程中遇到的一些好玩的面试题目 第一个面试题:ABC问题,有三个线程,工作的内容分别是打印出"A""B""C",需要做的 ...

  6. C++常考面试题汇总

    c++面试题 一 用简洁的语言描述 c++ 在 c 语言的基础上开发的一种面向对象编程的语言: 应用广泛: 支持多种编程范式,面向对象编程,泛型编程,和过程化编程:广泛应用于系统开发,引擎开发:支持类 ...

  7. .NET面试题系列[4] - C# 基础知识(2)

    2 类型转换 面试出现频率:主要考察装箱和拆箱.对于有笔试题的场合也可能会考一些基本的类型转换是否合法. 重要程度:10/10 CLR最重要的特性之一就是类型安全性.在运行时,CLR总是知道一个对象是 ...

  8. 我们公司的ASP.NET 笔试题,你觉得难度如何

    本套试题共8个题,主要考察C#面向对象基础,SQL和ASP.NET MVC基础知识. 第1-3题会使用到一个枚举类,其定义如下: public enum QuestionType { Text = , ...

  9. 我设计的ASP.NET笔试题,你会多少呢

    本笔试题考查范围包括面向对象基础.HTML.CSS.JS.EF.jQuery.SQL.编码思想.算法等范围. 第1题:接口和抽象类有何区别? 第2题:静态方法和实例方法有何区别? 第3题:什么是多态? ...

随机推荐

  1. openstack环境-解决windows虚机重启后比当前时间晚8小时问题

    背景: 生产环境下,发现windows虚机每次重启,时间都会倒退到虚机的格林威治时间(+8小时才是北京时间),也就是比当前时间晚8小时.测试发现,windows虚机所用的镜像,缺少了一个os_type ...

  2. nginx 工作原理总结

    1.  Nginx的模块与工作原理 Nginx由内核和模块组成,其中,内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件将客户端请求映射到一个location block(locat ...

  3. jmeter XLSX 读取

    import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.poi.xssf.usermodel.XSSFSheet; i ...

  4. Feign【开启GIZP压缩】

    SpringCloudFeign支持对请求和响应进行gzip压缩,以此来提高通信效率. 1.搭建gzip-demo工程 1.1.工程依赖: <parent> <groupId> ...

  5. python爬虫框架scrapy 豆瓣实战

    Scrapy 官方介绍是 An open source and collaborative framework for extracting the data you need from websit ...

  6. Go语言学习笔记(6)——指针

    指  针 指针: 存储另一个变量的内存地址的变量: Go语言的取地址符号也是& 1. 声明指针: var needle_name *type var b int = 10 var a *int ...

  7. SQL语句中加中括号[ ]的作用

    有些可能是SQL里面的保留字,但是你又用了它做字段名 比如Action,用[Action] 就可以避免这个问题,如果直接Action SQL就要报错了. 解决较长的中文名表名可能会被不识别的问题.

  8. delete删除数据造成归档日志增加,操作系统空间不足导致数据库hang住

    业务需求,对日志表历史数据进行清理.历史表均很大,使用delete 操作删除90天前的数据. 第一部分:快速删除数据 SQL> alter table CC.F_LOG parallel ; S ...

  9. 红帽linux系统开机自启动脚本。

    其实很多东西在最后完成以后会觉得也就那样,有意思的是探究的过程. 前段时间老板要求把一个程序做成linux系统开机自启动脚本的模式. 首先你需要写一个脚本. 我这边建立了一个.sh的脚本,就是用脚本启 ...

  10. hdu 1114需要装满的完全背包 重点是背包初始化的问题

    .,. 最近在看背包九讲 所以就刷了一下背包的题目 这道题目是一个典型的完全背包问题 而且要求满包 在这里 我就简单整理一下背包初始化问题吧 对于没有要求满包的问题 也就是背包可以不取满的问题 在背包 ...