vue 解决路由只变化参数页面组件不更新问题

下面就来详细讲解vue解决路由只变化参数页面组件不更新问题的攻略:

问题背景

在使用vue开发过程中,我们经常会用到vue-router,通过改变路由的参数实现动态更新页面内容。但是有时候我们会发现,虽然路由参数变化了,但页面并没有随之更新,这是为什么呢?

这是因为vue-router默认情况下只会改变路由参数,而不会强制重新渲染组件。如果要解决这个问题,我们需要对vue-router进行配置。

解决方案

要解决这个问题,我们需要使用vue-router提供的watch机制来实现。

首先,在我们的路由配置中,需要手动加上watchQuery属性,来监听路由参数的变化:

const router = new VueRouter({
  routes: [...],
  watchQuery: true
})

设置了watchQuery属性以后,我们就可以在组件中使用它了。需要注意的是,我们需要在组件中定义一个名为$route的计算属性,来获取路由参数的变化:

export default {
  computed: {
    $route () {
      return this.$router.currentRoute
    }
  },
  watch: {
    '$route.params': {
      handler () {
        // 路由参数变化后的处理逻辑
        // 例如重新获取数据等
      },
      deep: true
    }
  }
}

这里使用了deep选项,使得watch可以递归监听对象中的属性变化。

另外需要注意的是,我们在handler回调函数中可以执行重新获取数据等操作。

示例说明

下面通过两个示例说明:

示例一

假设我们有一个列表页,根据不同的路由参数展示不同的列表数据。我们在路由参数发生变化时需要重新获取数据并渲染页面。

首先我们需要在路由配置中开启watchQuery属性。代码如下:

const router = new VueRouter({
  routes: [
    {
      path: '/list/:type',
      component: List
    }
  ],
  watchQuery: true
})

接下来在组件中定义一个名为$route的计算属性,并在watch选项中监听$route.params对象的变化。代码如下:

<template>
  <div>
    <ul>
      <li v-for="item in list" :key="item.id">{{ item.title }}</li>
    </ul>
  </div>
</template>
<script>
export default {
  computed: {
    $route() {
      return this.$router.currentRoute;
    }
  },
  data() {
    return {
      list: []
    };
  },
  mounted() {
    this.getList();
  },
  watch: {
    '$route.params': {
      handler() {
        this.getList();
      },
      deep: true
    }
  },
  methods: {
    async getList() {
      const type = this.$route.params.type;
      const res = await fetch(`/api/list?type=${type}`);
      this.list = await res.json();
    }
  }
};
</script>

在上述代码中,我们在getList方法中根据路由参数重新获取数据,然后更新list数据,从而重新渲染页面。

示例二

假设我们有一个详情页,需要根据路由参数动态展示不同的详情数据。我们在路由参数发生变化时需要重新获取数据并渲染页面。

首先我们需要在路由配置中开启watchQuery属性。代码如下:

const router = new VueRouter({
  routes: [
    {
      path: '/detail/:id',
      component: Detail
    }
  ],
  watchQuery: true
})

接下来在组件中定义一个名为$route的计算属性,并在watch选项中监听$route.params对象的变化。代码如下:

<template>
  <div>
    <h2>{{ detail.title }}</h2>
    <p>{{ detail.content }}</p>
  </div>
</template>
<script>
export default {
  computed: {
    $route() {
      return this.$router.currentRoute;
    }
  },
  data() {
    return {
      detail: {}
    };
  },
  mounted() {
    this.getDetail();
  },
  watch: {
    '$route.params': {
      handler() {
        this.getDetail();
      },
      deep: true
    }
  },
  methods: {
    async getDetail() {
      const id = this.$route.params.id;
      const res = await fetch(`/api/detail?id=${id}`);
      this.detail = await res.json();
    }
  }
};
</script>

在上述代码中,我们在getDetail方法中根据路由参数重新获取数据,然后更新detail数据,从而重新渲染页面。

到这里我们就通过两个示例完整讲解了vue解决路由只变化参数页面组件不更新问题的攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue 解决路由只变化参数页面组件不更新问题 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • 代码块高亮可复制显示js插件highlight.js+clipboard.js整合

    代码块高亮可复制显示是网站开发中一个常用的功能。highlight.js和clipboard.js都是常用的JS库,它们可以很好地实现代码块高亮、复制功能,两个库结合使用可以很好地提高网站的用户体验性。下面是整合highlight.js+clipboard.js的完整攻略,分为以下几个步骤: 步骤1 安装highlight.js和clipboard.js 首…

    other 2023年6月27日
    00
  • ubuntu安装python3.6

    以下是关于“Ubuntu安装Python3.6”的完整攻略,包括基本概念、步骤和两个示例。 基本概念 Python是一种流行的编程语言,可以用于开发Web应用、数据分析、人工智能等领域。在Ubuntu操作系统中,可以使用apt命令安装Python3.6。 步骤 以下是在Ubuntu操作系统中安装Python3.6的步骤: 更新软件包列表:使用apt-get命…

    other 2023年5月7日
    00
  • .Net笔记:System.IO之windows文件操作的深入分析

    下面是“.Net笔记:System.IO之windows文件操作的深入分析”的完整攻略。 简介 System.IO 命名空间提供了一组用于对文件、文件夹、和目录进行操作的类和接口。本篇笔记将对 System.IO 命名空间的部分重要类和方法进行深入分析,并结合实际例子进行讲解。 FileStream 类 FileStream 类表示的是一个文件流类,可以用来…

    other 2023年6月26日
    00
  • 基于java的256位aes密码加密

    以下是关于基于Java的256位AES密码加密的完整攻略,包含两个示例。 基于Java的256位AES密码加密 在Java中,我们可以使用AES(Advanced Encryption Standard)算法来加密数据。以下是一个基于Java的256位AES密码加密的示例: import javax.crypto.Cipher; import javax.c…

    other 2023年5月9日
    00
  • 手把手教你用VS code快速搭建一个Golang项目

    下面是手把手教你用VS code快速搭建一个Golang项目的完整攻略。 1. 创建项目 打开VS code,在项目文件夹下,右键选择“新建文件夹”。 在弹出的窗口中,填写项目名称,例如“myproject”,然后点击确定。 2. 初始化项目 打开终端,进入项目文件夹:cd myproject 初始化项目:go mod init myproject 3. 编…

    other 2023年6月27日
    00
  • 一、Linux 设备驱动介绍及开发环境搭建

    一、Linux 设备驱动介绍及开发环境搭建 随着硬件设备的不断更新换代,嵌入式系统的开发也越来越需要设备驱动的支持。Linux 作为一种广泛使用的嵌入式系统,其对设备驱动的支持非常完善,因此学习 Linux 设备驱动的开发已经成为嵌入式开发者的必备技能之一。 1. 设备驱动介绍 设备驱动是连接操作系统和硬件设备之间的中间层,主要负责将操作系统的命令翻译成硬件…

    其他 2023年3月28日
    00
  • win10预览版怎么安装?win10预览版下载地址

    Win10预览版安装攻略 Win10预览版是微软提供给用户提前体验最新功能和改进的版本。以下是安装Win10预览版的详细攻略,包括下载地址和示例说明。 步骤一:下载Win10预览版 首先,你需要下载Win10预览版的安装文件。微软官方提供了下载页面,你可以在以下地址找到最新的预览版下载链接: Win10预览版下载地址 步骤二:选择适合的版本 在下载页面上,你…

    other 2023年8月4日
    00
  • 8代酷睿Coffee Lake首测 Intel i5 8250U移动CPU处理器性能对比评测

    8代酷睿Coffee Lake首测 Intel i5-8250U移动CPU处理器性能对比评测攻略 1. 硬件配置和测试环境准备 在进行性能对比评测之前,我们需要准备以下硬件配置和测试环境: 一台搭载Intel i5-8250U移动CPU的笔记本电脑 操作系统:Windows 10 测试软件:CPU-Z、Cinebench、Geekbench等 2. 测试方法…

    other 2023年10月16日
    00
合作推广
合作推广
分享本页
返回顶部