有没有办法在等待 Angular 2 路线解析时显示加载屏幕?
Is there a way to display a loading screen while waiting for an Angular 2 route to resolve?
我正在使用 Resolve
界面来确保在显示组件之前加载模型:
路线:
const APP_ROUTES: Routes = [
{
path: '',
component: AppComponent,
children: [
{
path: '',
component: PlatformComponent,
canActivate: [AuthenticationGuard],
resolve: {
account: AccountResolver,
},
解决:
@Injectable()
export class AccountResolver implements Resolve<Account> {
constructor(private userService: UserService) { }
resolve() {
return this.userService.getAccount().first();
}
}
应用程序组件:
@Component({
selector: 'app-root',
template: `
<shared-spinner></shared-spinner>
<router-outlet></router-outlet>
`,
})
export class AppComponent implements OnInit {
<shared-spinner>
组件选择器显示加载微调器。有没有办法告诉它只在 <router-outlet>
中还没有子组件呈现时才呈现?或者,还有其他方法吗?
编辑:
解决方法:
@Component({
selector: 'app-root',
template: `<router-outlet><shared-spinner *ngIf="!initialized"></shared-spinner></router-outlet>`,
})
export class AppComponent implements OnInit {
private initialized = false;
constructor(private userService: UserService) { }
ngOnInit() {
this.userService.getAccount().subscribe(account => {
if (this.initialized) {
return;
}
if (!account) {
return;
}
this.initialized = true;
}
);
}
}
以这种方式,它与 resolve 方法的功能紧密耦合。不知有没有什么simpler/cleaner...
尝试将 spinner 标签嵌套在路由器出口标签内,当组件加载到路由器出口时,它应该被替换。
编辑:将 *ngIf 指令添加到微调器以切换它的显示。组件将直接在 <router-outlet>
标签之后加载,而不是在它们内部。
我正在使用 Resolve
界面来确保在显示组件之前加载模型:
路线:
const APP_ROUTES: Routes = [
{
path: '',
component: AppComponent,
children: [
{
path: '',
component: PlatformComponent,
canActivate: [AuthenticationGuard],
resolve: {
account: AccountResolver,
},
解决:
@Injectable()
export class AccountResolver implements Resolve<Account> {
constructor(private userService: UserService) { }
resolve() {
return this.userService.getAccount().first();
}
}
应用程序组件:
@Component({
selector: 'app-root',
template: `
<shared-spinner></shared-spinner>
<router-outlet></router-outlet>
`,
})
export class AppComponent implements OnInit {
<shared-spinner>
组件选择器显示加载微调器。有没有办法告诉它只在 <router-outlet>
中还没有子组件呈现时才呈现?或者,还有其他方法吗?
编辑:
解决方法:
@Component({
selector: 'app-root',
template: `<router-outlet><shared-spinner *ngIf="!initialized"></shared-spinner></router-outlet>`,
})
export class AppComponent implements OnInit {
private initialized = false;
constructor(private userService: UserService) { }
ngOnInit() {
this.userService.getAccount().subscribe(account => {
if (this.initialized) {
return;
}
if (!account) {
return;
}
this.initialized = true;
}
);
}
}
以这种方式,它与 resolve 方法的功能紧密耦合。不知有没有什么simpler/cleaner...
尝试将 spinner 标签嵌套在路由器出口标签内,当组件加载到路由器出口时,它应该被替换。
编辑:将 *ngIf 指令添加到微调器以切换它的显示。组件将直接在 <router-outlet>
标签之后加载,而不是在它们内部。