VUE情景: 一个APP,多个角色,根据角色切换导航栏(利用computed+watch、computed+getters+watch)

情景:一个APP,三种业务,6个角色,相当于将6个APP集成一个APP开发(别问我为什么着迷作,产品经理和项目经理要求的),角色太多,那么根据角色来切换导航栏,进而切换APP的效果是我觉得最容易管理的,每个角色一个版块,想要换板块就换导航,由导航指向不同的路由,但是还有一个前提是,不管是们角色他们的其他页面不同,但是个人中心是相同的。
切换导航尝试了多种方式,最后方式三方式五是可行的(原理一样)。

备注一:以下是一个业务,两个角色,其他累加就行。
备注二:<Footer…>是我的导航组件。
备注三:以下代码均写在App.vue中
备注四:$route.meta.show是,该页面是否有导航栏
备注五:以下会出现state和localStorage,localStorage部分均可以去掉,因为。加localStorage是方便开发在网页刷新时state会清空的情况。
而在手机上,进入APP时,在欢迎界面我都会将localStorage中的role,赋给state的role,role每次改变时,又会将其存入state和localStorage,确保用户下次登录还是上次选择的角色。

方式一:利用state和localStorage的role来判断

HTML部分:

  <FooterTransportReceiver v-show="$route.meta.show && (role === 'receiver' || this.$store.state.role === 'receiver')"/>
<FooterTransportLssuer v-show="$route.meta.show && (role === 'lssuer'|| this.$store.state.role === 'lssuer')"/>

js部分:

  data () {
   
    return {
   
      role: localStorage.getItem('role')
    }
  }

vuex的dispatch是异步执行的,所以如果有用到state的地方但是又没有绑定组件的话就会导致渲染完成了但是数据没有获取到的情况

方式二:利用computed监听state和localStorage的role来判断

HTML部分:

<FooterTransportReceiver v-if="receiver"/>
<FooterTransportLssuer v-if="lssuer"/>

js部分:

  components: {
   
    FooterTransportReceiver,
    FooterTransportLssuer
  },
  computed: {
   
    role () {
   
      return this.$store.state.role
    },
    roleLocal () {
   
      return localStorage.getItem('role')
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值