当使用angular 路由守卫,或者使用解析器读取数据时,我们可以利用导航到路由以及显示组件的这段时间,显示一段loading加载动画效果。让用户知道,后台正在进行一些事情,而不是点击之后毫无反应,这将大大的改善用户体验。
本文的目的是向您展示如何在从一个路由导航到另一个路由时显示loading加载动画效果。
Demo应用
我们希望在每个导航开始时显示一个进度条,并在导航完成时隐藏它。
angular路由器服务允许我们访问Observable
通过events
。我们可以订阅这个观察者对象,并根据事件的类型采取相应的行动。
如果您想继续下去,可以从Github下载或者克隆demo应用
git clone https://github.com/ahasall/angular-routing-events-demo.git cd angular-routing-events-demo npm install
监听路由事件
让我们通过route events监听AppComponent
。我们希望在每个路由都能显示loading加载效果,因此我们必须侦听根组件中的导航事件。当然如果你是想我做的更复杂的后台管理系统,也可以在下级监听。
ts:
import { Component } from '@angular/core'; import { Event, NavigationCancel, NavigationEnd, NavigationError, NavigationStart, Router } from '@angular/router'; @Component({ selector: 'app-root', templateUrl: './app.component.html', styleUrls: ['./app.component.scss'] }) export class AppComponent { title = 'Ng-Teams'; loading = false; constructor(private router: Router) { this.router.events.subscribe((event: Event) => { switch (true) { case event instanceof NavigationStart: { this.loading = true; break; } case event instanceof NavigationEnd: case event instanceof NavigationCancel: case event instanceof NavigationError: { this.loading = false; break; } default: { break; } } }); } }
我们希望在应用程序的主工具栏下面显示加载动画。以下是实现这一目标的HTML。
html:
<p-progressBar mode="indeterminate" [style]="{'height': '6px'}"></p-progressBar>
如果loading为真我们就显示这个加载动画效果
,具体如何隐藏显示 以及具体效果自行解决,可以用组件库的加载效果,也可以用CSS3写一个,也可以是个图片等等。
这就是基于路由器事件有一个完全工作的加载效果所需的全部。完整的代码可以在GitHub中找到。
最新评论