8. MVVM和MVC区别?它和其它框架的区别是什么?哪些场景适合?【重点】
MVC和MVVM其实区别并不大,都是一种设计思想。主要就是MVC中Controller演变成MVVM中的View Model。MVVM主要解决了MVC中大量的DOM操作使页面渲染性能降低、加载速度变慢、影响用户体验。
区别:Vue数据驱动,通过数据来显示视图层而不是节点操作。
场景:数据操作比较多的场景,更加便捷。
9. Vue的优点是什么?【了解】
低耦合:
视图(View)可以独立于Model变化和修改,一个View Model可以绑定到不同的视图上,当View变化的时候Model可以不变,当Model变化的时候View也可以不变。
可重用性:
可以将一些视图逻辑放在一个View Model里面,让很多View重用这段视图逻辑。
独立开发:
开发人员可以专注于业务逻辑和数据的开发(View Model),设计人员可以专注于页面设计。
可测试:
界面素来是比较难于测试的,而现在测试可以针对View Model来写。
10. 路由之间跳转?【重点】
Router-link无参数跳转:
//使用name、path方式都行, 建议用name <router-link :to="{name:'home'}"> 或 <router-link :to="{path:'/home'}"> |
Router-link带参数跳转:Params传递参数:
<router-link :to="{name:'home', params: {id:1}}"> 或 <router-link :to="{path:'/home', params: {id:1}}"> 取参: this.$route.params.id |
Query传递参数:
<router-link :to="{name:'home', query: {id:1}}"> 取参: this.$route.query.id |
编程式路由(无参):
this.$router.push('/home') this.$router.push({name:'home'}) this.$router.push({path:'/home'}) |
编程式路由(有参):
Query传递参数:
this.$router.push({name:'home',query: {id:'1'}}) 取参: this.$route.query.id |
Params传递参数:
this.$router.push({name:'home',params: {id:'1'}}) 取参: this.$route.params.id |
Query与Params传递参数区别:
Query类似get,跳转之后页面url后面会拼接参数,类似?id=1。
Params类似post, 跳转之后页面url后面不会拼接参数,但是刷新页面id会消失。
使用replace()函数跳转:
//参数的具体格式同push this.$router.replace() |
使用go()函数跳转:
//向前或者向后跳转n个页面,n可为正整数或负整数 this.$router.go(n) |
Push跳转与Replace跳转的区别:
Push跳转到指定URL路径,并向History栈中添加一个记录,点击后退会返回到上一个页面。
Replace跳转到指定URL路径,但是History栈中不会有记录,点击返回会跳转到上上个页面。
11. Vue CLI中怎样使用自定义的组件?【掌握】
第一步:在components目录新建你的组件文件indexPage.vue,script一定要export default {}。
第二步:在需要用的页面(组件)中导入:import indexPage from ‘@/components/indexPage.vue’。
第三步:注入到Vue的子组件的components属性上面,components:{indexPage}。
第四步:在template中使用。
12. V-show和V-if指令的共同点和不同点?【重点】
v-show指令是通过修改元素的display的CSS属性让其显示或者隐藏;
v-if指令是直接销毁和重建DOM树达到让元素显示和隐藏的效果;
使用v-show会更加节省性能上的开销;当只需要一次显示或隐藏时,使用v-if更加合理。
13. 怎么定义vue-router的动态路由以及如何获取传过来的动态参数?【掌握】
定义:在router目录下的index.js文件中,对path属性加上后缀,例如/user/:id。
取参:使用route对象的params.id属性。
14. 什么是Vue生命周期?【重点】
Vue实例从创建到销毁的过程,就是生命周期。
也就是从开始创建、初始化数据、编译模板、挂载Dom→渲染、更新→渲染、卸载等一系列过程,我们称这是Vue的生命周期。
Vue生命周期总共分为8个阶段:创建前/后, 载入前/后,更新前/后,销毁前/销毁后。
创建前/后:在beforeCreate阶段,Vue实例的挂载元素el和数据对象data都为undefined,还未初始化。在created阶段,Vue实例的数据对象data有了,el还没有。
载入前/后:在beforeMount阶段,Vue实例的$el和data都初始化了,但还是挂载之前为虚拟的Dom节点,data数据还未替换。在mounted阶段,Vue实例挂载完成,data数据成功渲染。
更新前/后:当data变化时,会触发beforeUpdate和updated方法。
销毁前/后:在执行destroy方法后,对data的改变不会再触发周期函数,说明此时Vue实例已经解除了事件监听以及和Dom的绑定,但是Dom结构依然存在
第一次页面加载时会触发beforeCreate, created, beforeMount, mounted这几个钩子函数。
DOM渲染在mounted中就已经完成了。
生命周期钩子的常用场景:
beforeCreate:可以在此时加一些loading效果,在created时进行移除;
created:一般可以在此时发送一些网络请求,获取数据;
mounted:一般第一个业务逻辑会在这里开始,当需要操作DOM的时候执行,可以配合$nextTick 使用进行单一事件对数据的更新后更新DOM;
beforeUpdate:适合在更新之前访问现有的 DOM,比如手动移除已添加的事件监听器;
updated:当数据更新需要做统一业务处理的时候使用;
beforeDestroy:主要解绑一些使用addEventListener监听的事件等;