Angular路由解析器执行两次
创始人
2024-10-28 02:00:41
0

在定义路由时,可以通过在路由上加上一个 resolve 属性来实现路由的解析及数据预加载。但是有时候,Angular 路由解析器似乎会执行两次,这会导致性能问题。解决这个问题的方法是使用 rxjs 的操作符来处理。

假设我们有这样一个路由:

const routes: Routes = [
  {
    path: 'items',
    component: ItemsComponent,
    resolve: {
      items: ItemsResolver
    }
  }
];

其中,ItemsResolver 是一个从远程 API 获取数据的解析器。如果路由解析器执行两次,那么在控制台中将会看到两次 ItemsResolver 的输出。

为了解决这个问题,我们可以使用 rxjs 的 shareReplay 操作符来缓存 API 的响应。如下所示:

@Injectable({
  providedIn: 'root'
})
export class ItemsResolver implements Resolve {
  constructor(private httpClient: HttpClient) {}

  resolve() {
    return this.httpClient.get('https://api.example.com/items').pipe(shareReplay());
  }
}

这里使用了 shareReplay 操作符,它会把请求的响应保存在一个缓存流中,以便之后的订阅也可以共享这个缓存流中的数据。这个操作符会把已经发射过的数据缓存起来,并将缓存中的最后一个值交给新订阅者。这样就可以避免路由解析器重复执行 ItemsResolver

相关内容

热门资讯

5分钟了解!老友互娱游戏软件,... 5分钟了解!老友互娱游戏软件,青龙大厅app的辅助器,wpk教程(有挂机密)1、上手简单,内置详细流...
6分钟了解!掌酷十三张外 挂,... 6分钟了解!掌酷十三张外 挂,青龙大厅辅助器,透明挂教程(有挂攻略);1、操作简单,无需注册,只需要...
四分钟了解!荔枝竞技游戏外 挂... 四分钟了解!荔枝竞技游戏外 挂,369山东麻将,AI教程(有挂普及)进入游戏-大厅左侧-新手福利-激...
1分钟了解!浙衢麻将有挂吗,聚... 1分钟了解!浙衢麻将有挂吗,聚闲麻将有没有挂,教你教程(有挂辅助挂)1、实时聚闲麻将有没有挂开挂更新...
两分钟了解!乐乐围棋入门怎么开... 两分钟了解!乐乐围棋入门怎么开挂,福建天天开心辅助工具,第三方教程(有挂插件);1、很好的工具软件,...
九分钟了解!微友麻将亲友圈有挂... 九分钟了解!微友麻将亲友圈有挂吗,闲逸碰胡辅助器,微扑克教程(有挂技巧);1、超多福利:超高返利,海...
2分钟了解!同城字牌有挂吗,乐... 2分钟了解!同城字牌有挂吗,乐享牛牛有没有挂,规律教程(有挂黑科技)1、进入游戏-大厅左侧-新手福利...
8分钟了解!情怀麻将挂真的,哈... 8分钟了解!情怀麻将挂真的,哈局十三张,攻略教程(有挂插件)1、玩家可以在情怀麻将挂真的软件透明挂俱...
一分钟了解!广西友乐麻将是正规... 一分钟了解!广西友乐麻将是正规平台吗有挂吗,闽游app辅助器,可靠教程(有挂揭秘);运广西友乐麻将是...
一分钟了解!逗娱碰胡,胡乐麻将... 一分钟了解!逗娱碰胡,胡乐麻将神器免费下,力荐教程(有挂解说);一、胡乐麻将神器免费下软件透明挂的定...