You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular中如何隐藏permission-wrapper组件的DOM标签并渲染内容

实现无DOM标签的权限控制组件

核心思路

要让组件不生成自身的DOM标签,可通过框架特性实现:Vue中使用<template>根容器或函数式组件,React中使用Fragment或直接返回子节点,最终只根据权限判断是否渲染组件内容,完全不出现组件自身标签。

Vue 3 实现示例

组件代码

<template>
  <template v-if="hasPermission">
    <slot />
  </template>
</template>

<script setup>
import { computed } from 'vue'

const props = defineProps({
  requiredPermission: {
    type: String | Array,
    required: true
  }
})

// 模拟获取用户权限(实际项目可从状态管理/接口获取)
const getUserPermissions = () => ['edit', 'delete']

const hasPermission = computed(() => {
  const userPermissions = getUserPermissions()
  if (typeof props.requiredPermission === 'string') {
    return userPermissions.includes(props.requiredPermission)
  }
  if (Array.isArray(props.requiredPermission)) {
    return props.requiredPermission.some(perm => userPermissions.includes(perm))
  }
  return false
})
</script>

使用方式

<permission-wrapper required-permission="edit">
  <button>编辑内容</button>
</permission-wrapper>

<permission-wrapper :required-permission="['delete', 'admin']">
  <button>删除内容</button>
</permission-wrapper>

Vue 2 兼容方案(函数式组件)

Vue.component('permission-wrapper', {
  functional: true,
  props: {
    requiredPermission: { type: [String, Array], required: true }
  },
  render(h, context) {
    const getUserPermissions = () => ['edit', 'delete']
    const userPermissions = getUserPermissions()
    let hasPermission = false
    
    if (typeof context.props.requiredPermission === 'string') {
      hasPermission = userPermissions.includes(context.props.requiredPermission)
    } else if (Array.isArray(context.props.requiredPermission)) {
      hasPermission = context.props.requiredPermission.some(p => userPermissions.includes(p))
    }
    
    return hasPermission ? context.children : null
  }
})

React 实现示例

import React from 'react'

const PermissionWrapper = ({ requiredPermission, children }) => {
  // 模拟获取用户权限
  const getUserPermissions = () => ['edit', 'delete']
  const userPermissions = getUserPermissions()

  let hasPermission = false
  if (typeof requiredPermission === 'string') {
    hasPermission = userPermissions.includes(requiredPermission)
  } else if (Array.isArray(requiredPermission)) {
    hasPermission = requiredPermission.some(p => userPermissions.includes(p))
  }

  return hasPermission ? <>{children}</> : null
}

export default PermissionWrapper

使用方式

<PermissionWrapper requiredPermission="edit">
  <button>编辑内容</button>
</PermissionWrapper>

内容的提问来源于stack exchange,提问作者Ankit Chodavadiya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 09:32:03