当使用 useRouter 函数时:
-
一定要在 setup 函数顶部或其他位置执行
-
不能在 setup 函数内的其他函数中执行,否则会出现作用域改变,useRouter 函数返回 undefined 的问题。
此外,还需要注意以下几点:
- ** useRoute 和 useRouter 必须写在 setup 函数中**,否则会无法获取路由数据和路由方法。
- 如果想在自定义hooks中使用路由,可以直接从路由引入路由对象。
- 如果使用import { useRouter } from "vue-router"方式引入useRoute和useRouter,则必须在setup中调用,否则会返回undefined。可以直接引入router实例来解决。
如果出现 TypeError: Cannot read properties of undefined (reading 'push') 错误,可能是useRouter函数没有在正确的位置执行,需要将其放在setup函数顶部或其他位置执行,而不能在setup函数内的其他函数中执行。
以下是一些解决错误的示例代码:
// 正确使用useRouter函数
import { useRouter } from 'vue-router';
export default {
setup () {
const router = useRouter();
// ...
}
}
// 直接引入router实例
import router from '../router/index';
// 重写push方法
router.push({
path: '/login',
query: { redirect: router.currentRoute.value.fullPath }
});
// useRouter函数放在正确的位置
const router = useRouter(); // <-- router declared outside function: CORRECT
const enterChat = () => {
router.push({ name: "Chatroom" });
};