开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 13 天,点击查看活动详情
书接上文
10.vue路由的hash模式和history模式有什么区别?
- 1.hash的路由地址上有#号,history模式没有
- 2.在做回车刷新的时候,hash模式会加载对应页面,history会报错404
- 3.hash模式支持低版本浏览器,history不支持,因为是H5新增的API
- 4.hash不会重新加载页面,单页面应用必备
- 5.history有历史记录,H5新增了pushState和replacestate()去修改历史记录,并不会立刻发送请求
- 6.history需要后台配置
11.vuex刷新数据会丢失吗?怎么解决?
vuex肯定会重新获取数据,页面也会丢失数据
- 1.把数据直接保存在浏览器缓存里(cookie localstorage sessionstorage)
- 2.页面刷新的时候,再次请求数据,达到可以动态更新的方法监听浏览器的刷新数据,在刷新前把数据保存到sessionstorage里,刷新后请求数据,请求到了用vuex,如果没有那就用sessionstorage里的数据
12.vue的双向数据绑定原理是什么?
通过数据劫持和发布订阅者模式来实现,同时利用
object.defineProperty()
劫持各个属性的setter和getter
,在数据发生改变的时候发布消息给订阅者,触发对应的监听回调渲染视图,也就是说数据和视图时同步的,数据发生改变,视图跟着发生改变,视图改变,数据也会发生改变。
- 第一步:需要observer的数据对象进行递归遍历,包括子属性对象的属性,都加上setter和getter
- 第二步: compile模板解析指令,把模板中的变量替换成数据,然后初始化渲染视图,同时把每个指令对应的节点绑定上更新函数,添加订阅者,如果数据变化,收到通知,更新视图
- 第三步: watcher订阅者是observer和compile之间的通信桥梁,作用:
- 在自身实例化的时候忘订阅器内添加自己
- 自身要有一个update()方法
- 等待属性变动时,调用自身的update方法,触发compile这种的回调
- 第四步:MM作为数据绑定的入口,整合了observer、compile和watcher三者,通过observer来监听自己的数据变化,通过compile解析模板指令,最后利用watcher把observer和compile联系起来,最终达到数据更新视图更新,视图更新数据更新的效果
未完待续……
开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 13 天,点击查看活动详情