vue2做自定义按钮权限,请问前端接口请求还没执行完(还未获取到权限点),自定义指令就已执行,这个问题怎么解决?
目前用了延时器
在登录后就应该把该用户的所有权限查询过来,然后进行缓存,需要判断的地方就可以从缓存中直接查询
在Vue 2中,自定义指令在绑定到元素上时,会立即执行其bind
和inserted
钩子。如果在这些钩子中直接依赖于异步接口请求的结果,可能会遇到请求尚未完成而指令已执行的问题。
一种常见的解决方案是在自定义指令的bind
或inserted
钩子中不直接执行逻辑,而是等待接口请求完成后再执行。可以通过以下步骤实现:
Vue.observable
或Vuex)。下面是一个简化的示例,展示了如何解决这个问题:
// 假设你有一个用于管理权限的Vuex storeconst store = new Vuex.Store({ state: { permissions: null, // 权限列表 loading: true, // 请求是否正在进行 }, mutations: { setPermissions(state, permissions) { state.permissions = permissions; state.loading = false; }, }, actions: { fetchPermissions({ commit }) { // 发起异步请求获取权限 api.getPermissions().then(permissions => { commit('setPermissions', permissions); }); }, },});// 在Vue组件中使用Vuex storeexport default { created() { this.$store.dispatch('fetchPermissions'); },};// 自定义指令Vue.directive('permission', { bind(el, binding, vnode) { // 等待接口请求完成 const checkPermission = () => { const permissions = vnode.context.$store.state.permissions; if (permissions && /* 根据权限判断逻辑 */) { // 权限满足,执行指令逻辑 // ... } else { // 权限不满足,可以选择隐藏元素或执行其他逻辑 el.style.display = 'none'; } }; // 如果请求正在进行,则监听状态变化 if (vnode.context.$store.state.loading) { vnode.context.$store.watch( state => state.loading, (newVal, oldVal) => { if (!newVal) { checkPermission(); // 解绑监听器,避免不必要的计算 vnode.context.$store.$off('loading', checkPermission); } } ); } else { // 如果请求已完成,则直接检查权限 checkPermission(); } },});
在这个示例中,fetchPermissions
action 发起异步请求以获取权限。自定义指令v-permission
会等待请求完成后再执行权限检查逻辑。通过监听Vuex store中的loading
状态,指令可以知道何时开始检查权限。
请注意,这只是一个示例,具体实现可能需要根据你的应用程序的架构和需求进行调整。
vue2前端跨域问题,后端放置到公网上,所有人都可以访问,还配置了access-control-allow-origin为*,前端拿接口地址到浏览器可以拿到数据,使用apiPost测试,接口可以拿到数据,但是放到前端代码里面就跨域,如下图 vue2前端跨域问题
情况是这样,打算用this.$message提示信息,然后里面放上自己自定义的组件private-table,然后组件里用到了vuex,也就是this.$store里的数据,但是是undefined,请问出现这个问题的原因是啥,怎么解决?
vue2前端 代码如下 报错 created里的get请求可以获取到数据,为什么不渲染,报错搜索没有想要的结果,求求各位大佬帮忙看一下
请问如何在指定字符串前后插入相关内容? 因为字符串可能被标签(特殊字符)包裹,所以需要区别所有的特殊字符,在正确的位置插入相关内容, 比如,vditor 里面有内容 abc,但是我想到 abc 前面插入 efg,那么我必须到两个星号前面插入?请问该怎么做呢?
vue的自定义事件完成后才执行下面的console.log吗,还是怎么执行 请告知!
创建自定义指令 第一步,创建一个自定义命令类文件,新建application/common/command/Hello.php <?php namespace app\common\command; use think\console\Command; use think\console\Input; use think\console\input\Argument; use think\con