vue2通过权限控制tab标签显示和隐藏

vue2通过权限控制tab标签显示和隐藏

1、前言

  1. 在开发过程中,我们可能会遇到这样一个场景:根据不同权限对tab栏内容进行控制,这时候用自定义指令v-permission就达不到我们想要的效果,其是将当前节点的子元素进行移除,此时当前节点依然存在,如下图所示。
  2. 这时候就需要利用v-if自定义控制,其思路实:v-if中执行一个函数,函数传入一个权限值。在函数中判断权限值是否属于权限菜单内,返回布尔类型值。
<el-tab-pane label="负荷跟踪" name="first" v-permissions="['load_track']">
    <load-tracking ref="loadTrackingRef" :childStationId="childStationId" />
</el-tab-pane>

在这里插入图片描述

2、v-if实现自定义控制

<template>
  <div class="content">
     <el-tabs v-model="activeName" @tab-click="handleClick">
       <el-tab-pane label="负荷跟踪" name="first" v-if="checkPermissionArr(['load_track'])">
         <load-tracking v-if="activeName == 'first'" ref="loadTrackingRef" :childStationId="childStationId" />
       </el-tab-pane>
       <el-tab-pane label="功率跟踪" name="second" v-if="checkPermissionArr(['power_track'])">
         <power-tracking v-if="activeName == 'second'" ref="powerTrackingRef" :childStationId="childStationId" />
       </el-tab-pane>
       <el-tab-pane label="数据曲线分析" name="third" v-if="checkPermissionArr(['data_analysis'])">
         <curve-analysis v-if="activeName == 'third'" ref="curveAnalysisRef"
           :childStationId="childStationId"></curve-analysis>
       </el-tab-pane>
     </el-tabs>
</template>
<script>
import { checkPermissionArr } from '@/utils/permission' // 权限判断函数

export default{
   methods: {
    checkPermissionArr
  }
}
</script>
// src/utils/permission.js
/**
 * 字符权限校验
 * @param {Array} value 校验值
 * @returns {Boolean}
 */
export function checkPermissionArr (value) {
  if (value && value instanceof Array && value.length > 0) {
    let permissionIds = store.getters['acl/permission']
    // console.log(permissionIds)
    const permissionArr = value
    const hasPermission = permissionIds.some(permission => {
      return permissionArr.includes(permission)
    })

    if (!hasPermission) {
      return false
    }
    return true
  } else {
    console.error('暂无权限')
    return false
  }
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
如果你的权限标识是存储在数据中的,你可以通过计算属性或者方法来实现权限按钮的控制。 假设你有一个 `user` 对象,其中包含了当前用户的权限信息,你可以在组件中定义一个计算属性 `hasPermission`,用来判断当前用户是否有权限操作某个功能。然后在模板中,将 `v-if` 绑定到 `hasPermission` 计算属性上,根据计算属性的返回值来控制按钮的显示隐藏。 示例代码: ```vue <template> <button v-if="hasPermission('edit')" @click="handleEdit">编辑</button> </template> <script> export default { data() { return { user: { permissions: ['edit', 'delete'] } } }, computed: { hasPermission() { return (permission) => { return this.user.permissions.includes(permission); } } }, methods: { handleEdit() { // 编辑操作 } } } </script> ``` 上面的示例中,我们定义了一个计算属性 `hasPermission`,它返回一个函数,这个函数接收一个参数 `permission`,用来判断当前用户是否有操作权限。在模板中,我们使用 `v-if` 指令将按钮绑定到 `hasPermission` 计算属性上,根据计算属性的返回结果来控制按钮的显示隐藏。 需要注意的是,这里使用了箭头函数来定义 `hasPermission`,这是因为箭头函数可以保留当前组件实例的上下文,这样我们就可以在函数中访问到 `this.user` 对象。如果使用普通的函数定义方式,函数内部的 `this` 指向的是全局对象,访问不到组件实例的数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端~初学者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值