angular - 有没有办法在等待 Angular 2 路由解析时显示加载屏幕?

标签 angular angular-routing

我正在使用 Resolve确保在显示组件之前加载模型的接口(interface):

路线:

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 方法的功能紧密耦合。我想知道是否有更简单/更清洁的东西......

最佳答案

尝试将 spinner 标签嵌套在路由器导出标签内,当组件加载到路由器导出时,它应该被替换。

编辑:将 *ngIf 指令添加到微调器以切换它的显示。组件将在 <router-outlet> 之后直接加载标签,而不是标签内部。

关于angular - 有没有办法在等待 Angular 2 路由解析时显示加载屏幕?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43004412/

相关文章:

unit-testing - 如何对 material2 图标进行单元测试

angular - 在 ASP.NET Boilerplate .NET Core v3 中设置和获取 session 变量

angular - 通过服务将父路由参数传递给子路由

javascript - 使用 angular-router 在页面中导航 View

javascript - 在同一导航点击上重新加载路由器组件 - 在导航点击时刷新页面

angular - CdkDrag 更新位置

javascript - Angular 5,平移管道不纯吗?

javascript - 如何在单击按钮时获取多个复选框值?

javascript - 如何通过了解身份验证状态访问 protected 路由/禁用 Auth Guard

javascript - Angular : pass optional data within route