我正在编写我的routes.js
,我想在重定向模块之前先检查用户是否有访问模块的权限,方法是从一个可组合的函数中调用hasAccess()
函数,但是它给了我这样的警告:
Vue警告: inject()只能在安装程序()或功能组件中使用。
routes.js
import { createWebHistory, createRouter } from "vue-router";
import useFN from "./composables/FN"
const routes = [
// define routes here
]
const router = createRouter({
history: createWebHistory(),
routes,
})
const { hasAccess } = useFN() // use function from composable
router.beforeEach(async (to, from, next) => {
console.log(await hasAccess()); // call function from composable
next()
}
export default router;
如果没有安装程序(),如何从可组合函数调用函数?
发布于 2022-07-16 23:22:34
通常,我使用为自己创建的可组合性没有任何问题,因为它们通常是非常基本的,但是根据Vue 3 - inject() can only be used inside setup() or functional components可组合,您的可组合似乎使用的是提供/注入,这是在setup()方法中使用的。
如果可行的话,我想提出另一种办法。如果您正在使用方法(Action),则可以在您的商店中调用一个方法(Action)。
我经常使用在导航到路由之前执行检查的方法,例如,如果用户帐户被挂起,或者经过身份验证的用户没有预期的特权。
import { createRouter, createWebHistory } from 'vue-router'
import store from '@/store'
...
const account = {
'ACTIVE': 1,
'RESTRICTED': 2,
'DECLINED': 0
}
const routes = [
{
path: '/some-path',
component: () => import('../components/...'),
props: route => ({ reference: route.query.reference }),
meta: { requiresAuth: true },
beforeEnter: async (to, from) => {
if (store.getters['Auth/authUser'].account_status == account.RESTRICTED) {
return false
}
return true
},
},
...
]
```
https://stackoverflow.com/questions/72598095
复制相似问题