v-if与v-show都可以实现元素在页面的显示与隐藏
v-if是直接将元素在dom树上删除与添加,所以一般会更消耗性能,而v-show是设置元素的display:none,因而v-show适合频繁操作的元素。
computed与watch的区别
computed是依赖其他值来计算得到一个值,watch是监听某一个值的变化,然后进行一系列的操作
v-if与v-for为什么不能一起使用
因为v-for的渲染高于v-if
vue2.0数据响应的原理
利用object.defineProperty以及订阅者-发布者模式
利用object.defineProperty进行数据劫持,同时初始化之后进行模板编译,将data对象的数据拿出来展示到页面上。并且数据初始化时触发了object.defineProperty中的getter方法,将每个属性特有的watcher添加到订阅器Dep中,而当数据有变化时,就会相应触发setter方法,Dep订阅器就会去通知属性对应的watcher从来调用相应的update函数,从而实现页面的更新。
mvvm
model-view view-model 增加了view-model层,初始化将model层绑定到view中,在view-model对数据进行修改,无需再手动去修改dom,数据会自动更新到视图层。
虚拟dom
vue中有一棵虚拟dom树,当数据改变时,操作的是虚拟dom,然后将操作的那块虚拟dom去替换真实的dom树,减少对dom操作
Vue.mixin
将各个组件中相同的变量、方法、函数等都提炼到mixin文件中,与vuex不同的是两者不会相互影响,都是独立的。相同的函数,如created,当在组件引入后,组件内的与mixin都会执行,mixin内的优先于组件内的;相同的方法的话,组件内的会替代mixin内的理解Vue.mixin,利用Vue.mixin正确的偷懒 - 有梦想的咸鱼前端 - 博客园
$set
vue实例创建完成之后,再给对象添加新的属性或者删除属性,都是没有监听,不会响应式的挂载到页面上
数组通过下标修改数组或者获取数组的长度都是无法被监听
以上这两种办法都需要使用$set
history与hash
视觉上hash加上了一个#,hash利用的是onhashchange 事件,直接将页面状态与url关联起来,整个行为都是自主发生在前端的;而history在刷新的时候是实实在在的去请求后端的,如果后端没有配置的话,就会返回404了。
vue的性能优化
1。区分使用v-if与v-show
2.避免v-for与v-if的使用,v-for加key值
3.路由懒加载,图片懒加载
4.对象不要嵌套太深
5.第三方组件、插件的按需引入
6.适当使用keep-alive