Vue 2.0 嵌套路由实现豆瓣电影分页及数据刷新详解

作者:小布丁时间:2026-10-21 23:28:16浏览:604

本文介绍基于 Vue 2.0 嵌套路由实现豆瓣电影 Top250、热映等列表的分页功能。重点解决子路由指向同一组件时,因实例复用导致 created 钩子仅执行一次的问题。通过监听 $route 变化并调用 getData 方法,实现切换页码时重新请求 API 数据,确保界面内容同步更新。

Vue 2.0 嵌套路由实现豆瓣电影分页及数据刷新详解

前言

近期在练习 Vue 开发时,深入研究了官方文档中的嵌套路由机制。发现相关实战案例较少,且配置过程存在不少易错点。为此,我编写了一个基于 Vue 2.0 的 Demo,利用嵌套路由实现了豆瓣电影的分页展示功能,供读者参考交流,如有不足敬请指正。

Demo 界面截图如下:

Vue 2.0 嵌套路由实现豆瓣电影分页及数据刷新详解

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

以上就是本文的全部内容,希望能为各位的学习提供帮助,也欢迎大家继续支持本站。

作者最新文章