[Angular实战网易云]——8、路由守卫--resolve

本文详细介绍了Angular中的路由守卫功能,特别是`resolve`策略。路由守卫用于保护路由,确保在组件渲染前获取所需数据,提供更好的用户体验。通过创建`home-resolve.service.ts`并利用RxJS的`forkJoin`操作符处理异步请求,实现了在导航到`home`路由前预先获取数据。在路由配置中应用`resolve`,使得组件可以直接使用已解析的数据,避免了因API延迟导致的空组件展示问题。
摘要由CSDN通过智能技术生成

路由守卫

什么是路由守卫

字面理解,路由守卫就是保护路由的跳转。那为什么需要保护路由呢?实际场景中,会有很多不同的访问路径,分别控制不同的场景,就需要路由守卫。

  • 该用户可能无权导航到目标组件。
  • 可能用户得先登录(认证)。
  • 在显示目标组件前,你可能得先获取某些数据。
  • 在离开组件前,你可能要先保存修改。
  • 你可能要询问用户:你是否要放弃本次更改,而不用保存它们?

而路由器也是可以应对这些不同的场景

  • 用CanActivate来处理导航到某路由的情况。
  • 用CanActivateChild来处理导航到某子路由的情况。
  • 用CanDeactivate来处理从当前路由离开的情况.
  • 用Resolve在路由激活之前获取路由数据。
  • 用CanLoad来处理异步导航到某特性模块的情况。

resolve

这一节是使用了resolve预先获取组件数据

  • 如果你在使用真实 api,很有可能数据返回有延迟,导致无法即时显示。 在这种情况下,直到数据到达前,显示一个空的组件不是最好的用户体验。
  • 最好使用解析器预先从服务器上获取完数据,这样在路由激活的那一刻数据就准备好了。 还要在路由到此组件之前处理好错误。 但当某个 id 无法对应到一个危机详情时,就没办法处理它。 这时最好把用户带回到“危机列表”中,那里显示了所有有效的“危机”。
  • 总之,你希望的是只有当所有必要数据都已经拿到之后,才渲染这个路由组件。

步骤

  • 创建home-resolve.service.ts

在home路径下 : ng g s home-resolve

  • home-resolve.service.ts
import {
    Injectable } from '@angular/core';
import {
    Resolve } from '@angular/router';
import {
    forkJoin, Observable } from 'rxjs';
import {
    first } 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值