angular - 等待一段时间后在 Angular 中显示路线加载动画
问题描述
我有一些从外部模块加载的路由(登录、回调、未经授权等),有时应用程序需要 2 或 3 秒才能导航到该路由。当它等待路由到导航页面时,屏幕是空白的,除了顶部的导航栏。我想在路由时添加加载消息。我通过订阅router.events
Observable 找到了一种方法:
ngAfterViewInit() {
this._router.events.subscribe(event => {
if (event instanceof NavigationStart) {
this.routeLoading = true;
} else if (event instanceof NavigationEnd || event instanceof NavigationCancel) {
this.routeLoading = false;
}
});
}
但实际上只在导航需要半秒以上时才这样做,例如。许多路线,一旦我们登录,大多是瞬时的,在这些情况下,我不想让加载程序在屏幕上闪烁。
有没有办法做到这一点?我正在考虑使用pipe
运算符之类的东西,并且debounceTime
运算符可能会起作用,但我并不完全确定。有没有人有任何想法?
解决方案
我认为你可以这样做:
this.router.events.pipe(
filter(event => event instanceof NavigationStart || event instanceof NavigationEnd),
debounceTime(500)
).subscribe(event => this.routeLoading = event instanceof NavigationStart)
解释:
- 只使用
NavigationStart
andNavigationEnd
(你也可以添加NavigationCancel
) - Debounce 事件(如果在 debounce 结束之前发出,则不考虑)
- 动态设置值(最后一次调用将始终是 NavigationEnd 或 NavigationCancel),因此它将以
false
值结束
推荐阅读
- javascript - 在 Vue 组件中,挂载:{this.init()},引发错误:Unexpected token, expected {
- semantic-ui-react - 如何在 Semantic-UI-React 中启用调试?
- tensorflow - tensorflow 估计器:model_fn 在训练和服务中的不同路径
- sql - 根据另一个表中的选定行从一个表中选择数据
- sql - 按特定日期间隔计数分组
- javascript - JavaScript“in”运算符是否在后台执行循环?
- build - Clion:不要把`/nologo`标志放到build.make
- php - 包含 PHP 文件的 CSS 未加载
- java - Spring Boot多模块项目中的Vaadin问题
- objective-c - 类类型的文字列表/数组