能否封装一个类似 v-金年会app官方网
我需要封装一个权限控制指令,当前代码如下:
    app.directive('auth', {
      mounted(el, binding) {
        const permissionnames: string[] = [];
        if ('string' === typeof binding.value) {
          permissionnames.push(binding.value);
        } else {
          permissionnames.push(... binding.value);
        }
        useuserstore().permissionnames.some((name) => permissionnames.includes(name)) || el.remove();
      }
    });当我这样使用:
// 组件
<div>{{ content }}</div>
<script type="ts" setup>
import { onmounted } from 'vue';
onmounted(() => console.log('auth content mounted.'))
</script>
// 引用组件
<div v-auth="['permission']">
  <mycomponent />
</div>如果用户不拥有 permission 这个权限页面上不会显示这个元素。
当前的问题是:实际上组件还是被加载了之后又被 remove 掉,组件的 onmounted 生命周期函数已经被调用。
我希望自定义指令 v-auth 能像内置指令 v-if 一样跳过当前组件的加载过程,且不会触发 onmounted 生命周期函数请问如何做?
这里我也试过了 created 和 beforemount 但找不到办法来中断当前组件的加载。抛异常虽然会中断加载,但组件如果没有定义错误捕获则会中断整个页面的加载。
 
 
推荐文章: