最后
总的来说,面试官要是考察思路就会从你实际做过的项目入手,考察你实际编码能力,就会让你在电脑敲代码,看你用什么编辑器、插件、编码习惯等。所以我们在回答面试官问题时,有一个清晰的逻辑思路,清楚知道自己在和面试官说项目说技术时的话就好了
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
1、首先我们得需要一个栈
2、其次我们把页面保存到栈中
那么怎么构建一个栈呢?
栈的特性是什么?
关于栈的特性,我们可以从 操作
和 规则
两个方面来看:
1、操作上:
在操作上,栈主要有两个操作:一个是进栈(PUSH),另一个是出栈(POP)
2、规则上:
在规则上,栈遵循 <先进后出> 的原则
基于以上的特性,我们可以通过一个 数组 来表述一个栈,因为数组同样具备 push
与 pop
的操作,同样数据中元素的进出在push
与pop
时,也遵循了 <先进后出> 的原则
把页面保存到栈中
有了栈,下面我们需要做的就是把页面保存到栈中,把页面保存到栈中,我们就必须要借助 Vue 中提供的 KeepAlive 组件。
先明确一下,KeepAlive 的作用:
包裹动态组件时,会缓存不活动的组件实例,而不是销毁它们
并且我们必须要知道,对于 KeepAlive 来说,它提供了一个关键的 Props:
include - 字符串或正则表达式。只有名称匹配的组件会被缓存。
以上功能点,就是我们 把页面保存到栈中 的关键。
我们只需要把需要缓存的页面名称(其实就是 组件名称),通过 include
放入到 keep-alive
组件中,那么我们就可以完成页面的缓存了。
明确了思路之后,我们来看实现。对于实际的实现,我们需要借助 Vue 的实际操作来去做。
我们知道当我们需要在 Vue 中跳转页面时,我们实际上是在进行路由的跳转,而路由的跳转对应的是组件的切换。
所以要实现“虚拟任务栈”,我们需要从以下两个地方着手:
1、在根组件(APP.vue) 中监听路由的跳转,实现动画(进入、退出)以及完成页面的进栈和出栈。
2、在页面跳转的编程式导航中,我们需要告诉根组件,当前的跳转是在进入还是在退出。
达到以上两步,我们就可以实现 “虚拟任务栈” 的功能。
那么我们下面来看,我们应该怎么做(代码直接截取《混合开发 仿京东项目App》 中的代码实现):
首先:在根组件(APP.vue) 中监听路由的跳转
监听路由跳转,我们需要处理三种情况:
1、页面的进入
2、页面的退出
3、页面跳转到 tabBar 的页面中(清空虚拟任务栈)
以下是具体代码实现:
// App.vue
其次:在页面跳转时
在页面跳转时,同样对应三种情况:
1、进入新的页面,通知虚拟任务栈,当前页面需要被保存到栈中
2、退出页面,通知虚拟任务栈,当前的页面需要从栈中弹出
3、进入 tabbar 中的页面,通知虚拟任务栈,执行清空操作
以下是第一种情况:进入新的页面,通知虚拟任务栈,当前页面需要被保存到栈中
// 1、进入新的页面,当前页面需要被保存到栈中
onGoodsItemClick: function(item) {
…
// 编程式导航实现页面的跳转,
this.$router.push({
// 进入页面的路由名称
name: ‘goodsDetails’,
params: {
// 进入页面的标记
routerType: ‘push’
},
// 把传递的数据附加到我们的 URL 上
query: {
…
}
});
},
然后是第二种情况:退出页面,通知虚拟任务栈,当前的页面需要从栈中弹出
2、退出页面,通知虚拟任务栈,当前的页面需要从栈中弹出
/**
- 后退按钮点击事件
*/
onBackClick: function() {
// 正常的后退操作
this.$router.go(-1);
},
最后是第三种情况:
3、进入 tabbar 中的页面,通知虚拟任务栈,执行清空操作
// 编程式导航实现页面的跳转,
分享
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
最后是第三种情况:
3、进入 tabbar 中的页面,通知虚拟任务栈,执行清空操作
// 编程式导航实现页面的跳转,
分享
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】