吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 757|回复: 4
收起左侧

[求助] VUE3,在main.js中调用路由(useRouter )的问题

[复制链接]
cqwcns 发表于 2023-1-28 10:39
见如下代码,我在main.js中加了一个全局鉴权的模块,如果服务器反馈鉴权失败,希望将路由跳转的登录页面(login)。
但useRouter部分报错:
[Vue warn]: inject() can only be used inside setup() or functional components.
Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'push')

不知道如何解决,请各位大佬指教,感谢。


完整代码:
[JavaScript] 纯文本查看 复制代码
import { createApp } from 'vue';
import { createPinia } from 'pinia';
import ElementPlus from 'element-plus';
import cloudbase from "@cloudbase/js-sdk";
import CKEditor from '@ckeditor/ckeditor5-vue';

import './assets/main.css';
import 'element-plus/theme-chalk/index.css';

import App from './App.vue';
import router from './router';


const app = createApp(App);

const cloudbaseApp = cloudbase.init({ env: 'your-env' });
await cloudbaseApp.auth().anonymousAuthProvider().signIn().then(() => {
    console.log('成功连接云端')
});

app.use(ElementPlus);
app.use(createPinia());
app.use(router);
app.use(CKEditor);

import * as ElementPlusIconsVue from '@element-plus/icons-vue';
for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
    app.component(key, component)
}

app.mount('#app');

import { ElMessageBox } from 'element-plus';
import { useRouter } from 'vue-router';
import { useUserStore } from '@/stores/user';

const cloudbaseFunction = async (e) => {
    const userStore = useUserStore();
    const { target, data } = e;
    const callCloud = await cloudbase.callFunction({
        name: 'webCloud',
        data: {
            target,
            userPhoneNumber: userStore.user.phoneNumber + '1',
            userToken: userStore.token,
            data
        }
    })
    console.log('[callCloud]', callCloud.result);
    if (callCloud.result.isAuthNoPass) {
        const router = useRouter();
        ElMessageBox.alert('自动鉴权不通过,请重新登录', '权限异常', {
            type: 'error',
            confirmButtonText: '好的',
            'show-close': false,
            callback: (action) => {
                userStore.toLogOut();
                router.push({ name: 'login' })
            },
        })

        return;
    }
    return callCloud;
}
app.provide('global', { cloudbase: cloudbaseApp, cloudbaseFunction });

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| cqwcns 发表于 2023-1-28 10:46
本帖最后由 cqwcns 于 2023-1-28 10:47 编辑

打印了一下变量,是这样的:

[JavaScript] 纯文本查看 复制代码
        console.log('useRouter', useRouter)
        // useRouter f useRouter() {
        //     return inject(routerKey);
        //   }
        const router = useRouter();
        console.log('router', router)\
        // router undefined
troybug 发表于 2023-1-28 10:48
这个错误提示很明显了,断点调试下看看为什么router是undefined

免费评分

参与人数 1吾爱币 +1 收起 理由
cqwcns + 1 谢谢@Thanks!

查看全部评分

wendster 发表于 2023-1-28 10:52
你的inject要放在Vue组件里(主要指setup()里),你可能放在普通代码里了

免费评分

参与人数 1热心值 +1 收起 理由
cqwcns + 1 谢谢@Thanks!

查看全部评分

水到渠成的执着 发表于 2023-1-28 13:51
本帖最后由 水到渠成的执着 于 2023-1-28 13:53 编辑

[JavaScript] 纯文本查看 复制代码
import router from "@/router/index";
router.push("/login");

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
cqwcns + 1 + 1 我很赞同!

查看全部评分

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 01:29

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表