vue2.7版本跳转问题

当vue2.x的版本想使用setup语法,可升级为vue2.7版本,这个版本就可以支持vue3大部分语法,但是还是有一些语法不支持,具体可参考官网vue2.7与3.0的差异

在 Vue 2.7 中使用 setup() 语法时,可以通过 useRouter 或 useRoute 来获取路由实例,从而实现路由跳转。虽然 Vue 2.7 支持了 Composition API,但路由相关的使用方式更接近 Vue 3 的写法。

具体实现步骤如下:

1.首先需要从 vue-router 中导入 useRouter
2.在 setup() 函数中调用 useRouter() 获取路由实例
3.使用路由实例的 push() 或 replace() 方法进行跳转

示例代码如下:
<template>
  <div>
    <button @click="goToHome">跳转到首页</button>
    <button @click="goToUser(123)">跳转到用户页</button>
  </div>
</template>

<script setup>
import { useRouter } from 'vue-router'

// 获取路由实例
const router = useRouter()

// 跳转到首页
const goToHome = () => {
  router.push('/home')
}

// 跳转到带参数的用户页
const goToUser = (id) => {
  // 可以使用路径字符串
  router.push(`/user/${id}`)
  
  // 也可以使用对象形式
  // router.push({ path: `/user/${id}` })
  
  // 命名路由的方式
  // router.push({ name: 'user', params: { id } })
}
</script>

但是写完你会发现,控制台会报错:Error in setup: "TypeError: (0 , vue_router__WEBPACK_IMPORTED_MODULE_2__.useRouter) is not a function,类似这种,是因为 Vue 2.7 搭配的 Vue Router 3.x 版本本身不支持 useRouter 这个 Composition API 方法。

核心原因

Vue 2.7 虽然支持了 Composition API(如 setup 函数),但它依赖的路由库仍然是 Vue Router 3.x(专为 Vue 2 设计)。
而 useRouter/useRoute 是 Vue Router 4.x(专为 Vue 3 设计)才新增的 Composition API 方法,Vue Router 3.x 中根本没有这两个函数,因此直接导入会报错。

解决方案:在 Vue 2.7 + Vue Router 3.x 中使用路由

在 setup 函数中,需要通过 this.router 或 this.route 来操作路由,但 setup 函数内部没有 this 上下文,因此需要通过getCurrentInstance 来获取组件实例,进而访问路由。

步骤如下:

1.从 Vue 中导入 getCurrentInstance(用于获取当前组件实例)。
2.通过实例的 proxy 属性访问 router 或route。

示例代码:

<template>
  <button @click="goToHome">跳转到首页</button>
</template>

<script setup>
import { getCurrentInstance } from 'vue'

// 获取当前组件实例
const instance = getCurrentInstance()
// 通过实例的 proxy 访问路由实例(相当于 this.$router)
const router = instance.proxy.$router

// 路由跳转
const goToHome = () => {
  router.push('/home') // 普通跳转
  // 带参数跳转
  // router.push({ path: '/user', query: { id: 1 } })
  // 替换历史记录
  // router.replace('/about')
}
</script>

关键说明

getCurrentInstance 的作用:在 setup 中获取组件实例,其 proxy 属性等价于组件的 this,因此可以通过 proxy.router 访问路由,和 Vue 2 选项式 API 中的 this.router 完全一致。
为什么不能用 useRouter:再次强调,Vue Router 3.x 不支持该方法,只有升级到 Vue Router 4.x 才能使用,但 Vue Router 4.x 仅支持 Vue 3,不兼容 Vue 2.7,因此不可行。
路由操作方式:支持所有 Vue Router 3.x 的路由方法(push/replace/go 等),用法和选项式 API 中完全一致。

总结

Vue 2.7 虽然支持 setup 语法,但路由层仍受限于 Vue Router 3.x,因此必须通过 getCurrentInstance 间接访问路由实例,而不能直接使用 Vue Router 4.x 的 useRouter。按上述方法修改后,即可解决报错问题。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容