# 面试题 1

Vue 打包后,assets 和 static 的区别是什么?

道为专家解析:

相同点:assets 和 static 两个都是存放静态资源文件。项目中所需要的资源文件图片,字体图标,样式文件等都可以放在这两个文件下,这是相同点。

不相同点:assets 中存放的静态资源文件在项目打包时,也就是运行 npm run build 时会将 assets 中放置的静态资源文件进行打包上传,所谓打包简单点可以理解为压缩体积,代码格式化。而压缩后的静态资源文件最终也都会放置在 static 文件中跟着 index.html 一同上传至服务器。static 中放置的静态资源文件就不会要走打包压缩格式化等流程,而是直接进入打包好的目录,直接上传至服务器。

因为避免了压缩直接进行上传,在打包时会提高一定的效率,但是 static 中的资源文件由于没有进行压缩等操作,所以文件的体积也就相对于 assets 中打包后的文件提交较大点。在服务器中就会占据更大的空间。

建议:将项目中 template 需要的样式文件 js 文件等都可以放置在 assets 中,走打包这一流程。减少体积。而项目中引入的第三方的资源文件如 iconfoont.css 等文件可以放置在 static 中,因为这些引入的第三方文件已经经过处理,我们不再需要处理,直接上传。

# 面试题 2

什么是渐进式框架?对渐进式框架的理解有哪些?

道为专家解析:

Vue 是一个渐进式框架,使用 Vue 核心库,在 Vue 核心库基础上,根据需要逐步添加相关功能,这个过程就是渐进式过程,所以 Vue 被称之为渐进式框架。Vue 的核心的功能,是一个视图模板引擎,但这不是说 Vue 就不能成为一个框架。在声明式渲染(视图模板引擎)的基础上,我们可以通过添加组件系统、客户端路由、大规模状态管理来构建一个完整的框架。

更重要的是,这些功能相互独立,你可以在核心功能的基础上任意选用其他的部件,不一定要全部整合在一起。可以看到,所说的 **“渐进式”**,其实就是 Vue 的使用方式,同时也体现了 Vue 的设计的理念。

# 面试题 3

vue-router 和 location.href 都可以实现跳转,但是 rvue-router 和 location.href 跳转的区别是什么?

道为专家解析:

vue-router 使用 pushState 进行路由更新,静态跳转,页面不会重新加载;location.href 会触发浏览器,页面重新加载一次。

vue-router 使用 diff 算法,实现按需加载,减少 dom 操作。

vue-router 是路由跳转或同一个页面跳转;location.href 是不同页面间跳转。

vue-router 是异步加载 this.$nextTick (()=>{获取 url});location.href 是同步加载。

# 面试题 4

router 和 route 分别是什么?它们有什么区别?

道为专家解析:

$route 是“路由信息对象”,包括 path,params,hash,query,fullPath,matched,name` 等路由信息参数。

$router` 是 ' 路由实例 ' 对象包括了路由的跳转方法,钩子函数等。

# 面试题 5

Vue 常用的修饰符有哪些,都分别有什么作用?

道为专家解析:

.stop 阻止事件继续传播

.prevent 阻止标签默认行为

.capture 使用事件捕获模式,即元素自身触发的事件先在此处处理,然后才交由内部元素进行处理

.self 只当在 event.target 是当前元素自身时触发处理函数

.once 事件将只会触发一次

.passive 告诉浏览器你不想阻止事件的默认行为

v-model 的修饰符

element 的修饰符 elementUI 的 input,我们需要在后面加上.native, 因为 elementUI 对 input 进行了封装,原生的事件不起作用。

使用修饰符时,顺序很重要;相应的代码会以同样的顺序产生。因此,用 v-on:click.prevent.self 会阻止所有的点击,而 v-on:click.self.prevent 只会阻止对元素自身的点击。

# 面试题 6

Vue 响应式原理是什么?用到了什么方法?

道为专家解析:

Vue 的响应式原理是核心通过 ES5 的保护对象的 Object.defindeProperty 中的访问器属性中的 get 和 set 方法,data 中声明的属性都被添加了访问器属性,当读取 data 中的数据时自动调用 get 方法,当修改 data 中的数据时,自动调用 set 方法,检测到数据的变化,会通知观察者 Wacher,观察者 Wacher 自动触发重新 render 当前组件(子组件不会重新渲染), 生成新的虚拟 DOM 树,Vue 框架会遍历并对比新虚拟 DOM 树和旧虚拟 DOM 树中每个节点的差别,并记录下来,最后,加载操作,将所有记录的不同点,局部修改到真实 DOM 树上。