addRoute进行权限控制碰到的问题

本文介绍了前端权限管理的实现方式,通过后端返回的权限名筛选并动态添加路由。在Vuex中,由于数据获取的异步性,可能出现无法取值的问题。解决方法包括使用setTimeout延迟取值或采用async/await处理异步。在获取角色数据前,重复执行addRoute可能导致路由命名冲突,但成功获取数据后警告消失。重点讨论了如何避免数据未准备好时的错误操作。
摘要由CSDN通过智能技术生成

介绍:权限管理实现,前端存储完整的路由表,通过后端返回的权限名role来筛选需要渲染的路由,然后利用addRoute来动态添加路由。 由于要把role存到vuex中(存在本地可以随意更改,无法实现真正的权限控制),在导航守卫中先判断是否有role或是路由表来决定是要重新获取权限role还是直接筛选路由表,这时会出现vuex中获取的数据是_observe_:Observe类型,可以console但是无法取值。

问题原因以及解决方法

_observe_:Observe类型的数据无法取值遍历

        具体原因:同步和异步的问题,因为是先请求获取到数据存储到vuex中,然后我们来判断vuex中是否有值,这时就存在数据还没有存进去,但是已经读取了,导致无法获取到。

        解决方法

1、既然是异步问题,那么我们只要在已经存上值的情况下再取值就没问题了,可以通过setTimeout,设置定时器延缓我们取值

        

2、如果还有问题,也可以使用async await函数来等待获取到值在进行后续步骤,

        注意:这里不可以直接await定时器,因为await只是等待一个值,定时器开始执行就会给一个值,执行完还有一个返回值,当定时器开始执行时,返回一个值回让await直接继续执行,所以需要通过promise包裹来等待定时器。

        

        getRouterList方法:请求,筛选路由表,以及动态添加路由

 备注:addRoute是添加单个路由到一级路由,每次添加都会走一次导航守卫,想要添加子路由,需要addRoute("父级路由的name",要添加的路由对象)。在没有获取到role的数据时,会导致if中的方法内的addRoute重复执行,出现警告Duplicate named routes definition,路由命名name重复,成功获取到role数据后,该警告消失。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值