【前端芝士树】 Vue.js 面试题整理MVVM是什么?MVVM 是 Model-View-ViewModel 的缩写。Model代表数据模型,也可以在Model中定义数据修改和操作的业务逻辑。View 代表UI 组件,它负责将数据模型转化成UI 展现出来。ViewModel 监听模型数据的改变和控制视图行为、处理用户交互,简单理解就是一个同步View 和 Model的对象,连接Model和View。在MVVM架构下,View 和 Model 之间并没有直接的联系,而是通过ViewModel进行交互,Model 和 ViewModel 之间的交互是双向的, 因此View 数据的变化会同步到Model中,而Model 数据的变化也会立即反应到View 上。ViewModel 通过双向数据绑定把 View 层和 Model 层连接了起来,而View 和 Model 之间的同步工作完全是自动的,无需人为干涉,因此开发者只需关注业务逻辑,不需要手动操作DOM, 不需要关注数据状态的同步问题,复杂的数据状态维护完全由 MVVM 来统一管理。注意, MVVM模型中, Model和View是不会直接连接的,而ViewModel则会以双向连接的形式连接Model和View。0. Vue的特性(优缺点)轻量级的框架双向数据绑定指令插件化1. Vue的生命周期具体可以参照官网的这张图,左侧以红色框表示的都是阶段beforeCreatecreatedbeforeMountmountedbeforeUpdatedupdatedbeforeDestroydestroyed大致过程就是数据初始化(12)完成数据观测、属性和方法的运算加载,event/wather时间回调。dom挂载阶段(34)el被新创建的vm.$el替换并挂载到实例上去,之后调用钩子函数。数据更新阶段(56)数据更新,虚拟dom重渲染组件卸载阶段(78)销毁实例及子实例2. Vue实现数据双向绑定的原理vue实现数据双向绑定主要是采用数据劫持结合发布者-订阅者模式的方式,通过Object.defineProperty()来劫持各个属性的setter,getter,在数据变动时发布消息给订阅者,触发相应监听回调。当把一个普通 Javascript 对象传给 Vue 实例来作为它的 data 选项时,Vue 将遍历它的属性,用 Object.defineProperty 将它们转为 getter/setter。用户看不到 getter/setter,但是在内部它们让 Vue 追踪依赖,在属性被访问和修改时通知变化。vue的数据双向绑定 将MVVM作为数据绑定的入口,整合Observer,Compile和Watcher三者,通过Observer来监听自己的model的数据变化,通过Compile来解析编译模板指令,最终利用watcher搭起observer和Compile之间的通信桥梁,达到数据变化 —>视图更新;视图交互变化(input)—>数据model变更双向绑定效果。3. Vue的路由实现路由的实现有两种:hash和history interface来实现前端路由,hash在浏览器中符号“#”,#以及#后面的字符称之为hash,用window.location.hash读取;特点:(1)hash虽然在URL中,但不被包括在HTTP请求中(2)用来指导浏览器动作,对服务端安全无用,hash不会重加载页面history采用h5的新特性;且提供了两个新方法:pushState(),replaceState()可以对浏览器历史记录栈进行修改,以及popState事件的监听到状态变更,不过history有个问题是:如果用户直接在地址栏中输入并回车,浏览器重启或重新加载时,history模式会将url修改的和正常请求后端一样,此情况下,重新向后端发送请求,后端如果没有配置对应路由处理,则返回404,解决方法是后端配置一下。4. Vue路由传参<router-link :to="{path:’/index’,params:{id:num}}"><router-link :to="{ path:’/index’ , query:{id:num}}">然后通过$route.params来读取数据,但路由传递参数值是对象的话就不行了会报错,传递前用base64转译一下就可以了。未完待续 - - - - - -参考链接 MVVM - 廖雪峰的官方网站MVC,MVP 和 MVVM 的图示 - 阮一峰的网络日志vue.js学习笔记(一):什么是mvvm框架,vue.js的核心思想 - _林冲 - 博客园