Vue 2.0 嵌套路由实现豆瓣电影分页及数据刷新详解
本文介绍基于 Vue 2.0 嵌套路由实现豆瓣电影 Top250、热映等列表的分页功能。重点解决子路由指向同一组件时,因实例复用导致 created 钩子仅执行一次的问题。通过监听 $route 变化并调用 getData 方法,实现切换页码时重新请求 API 数据,确保界面内容同步更新。
Vue 2.0 嵌套路由实现豆瓣电影分页及数据刷新详解
前言
近期在练习 Vue 开发时,深入研究了官方文档中的嵌套路由机制。发现相关实战案例较少,且配置过程存在不少易错点。为此,我编写了一个基于 Vue 2.0 的 Demo,利用嵌套路由实现了豆瓣电影的分页展示功能,供读者参考交流,如有不足敬请指正。
Demo 界面截图如下:

Demo 功能简述
Demo 功能简述
主路由配置了四个主要视图:Top250(charts)、正在热映(hot)、即将上映(ing)以及新片榜(newmovie)。
const router = new VueRouter({
routes: [
{
path: '/', //设置默认路由为Top250
component: charts
},
{
path: '/charts', //Top250
component: charts
},
{
path: '/hot',
component: hot
},
{
path: '/ing',
component: ing
},
{
path: '/newmovie',
component: newmovie
},
]
}
嵌套路由配置与组件入口
在 Top250(charts)模块中引入了分页功能,并将其配置为子路由。具体的路由配置代码如下:
{
path: '/charts/:id', //子路由
component: charts,
children: [
{path: '1', component: moviecontent},
{path: '2', component: moviecontent2},
{path: '3', component: moviecontent3}
]
}
在 charts 组件模板中,需要添加触发分页的入口链接,示例代码如下:
<router-link to="/charts/1">1</router-link>
<router-link to="/charts/2">2</router-link>
<router-link to="/charts/3">3</router-link>
同时,在 charts 组件内部需预留子路由出口,以便渲染对应的子组件,代码示例如下:
<router-view></router-view>
子路由指向同一组件的数据更新方案
关键问题:当子路由切换指向同一个组件时,如何确保数据更新?
同样在 Top250(charts)模块中,我们将分页功能配置为子路由,但所有页码均指向同一个组件实例。配置方式如下:
{
path: '/charts/:id', //子路由
component: charts,
children: [
{path: '1', component: moviecontent2}, // 同一组件
{path: '2', component: moviecontent2}, // 同一组件
{path: '3', component: moviecontent2} // 同一组件
]
}
核心要点:
由于 Vue 路由复用机制,当切换至同一组件时,该组件实例已在首次进入路由时创建,后续切换不会重新触发 created 生命周期钩子。因此,必须通过监听 $route 对象的变化来手动调用 getData 方法,从而在路由切换时重新获取并更新数据。
created: function () {
//第一次进入路由时数据的更新
this.$http.jsonp()
},
watch: {
'$route': 'getData' //切换路由,调用getData方法
},
methods: {
getData: function () {
//路由切换,重新请求数据
this.$http.jsonp()
}
}
相关数据接口来自豆瓣电影 API。
代码实现较为简略,仅供参考。尽管代码质量有限,但子路由的功能已正常运行。
本 Demo 完整代码下载地址:doubandemo_jb51.rar
以上就是本文的全部内容,希望能为各位的学习提供帮助,也欢迎大家继续支持本站。
前端大屏自适应方案:缩放与视口单位对比
2026-10-31 18:19:27
前端大文件分片下载实现:基于localForage与Vue的完整方案
2026-10-31 16:11:47
Vue3 中使用 VueUse 实现指定区域全屏阅读功能
2026-10-31 13:55:05
基于Vue与Pinia实现页面Loading动画及请求拦截处理
2026-10-31 13:54:42
Vue封装Echarts通用组件:Vue2/Vue3 JS/TS三种模板及常用配置事件详解
2026-10-31 11:38:03
