Angular2:路由到其他视图时隐藏当前视图

Angular2: Hide current view when routing to other view

我正在使用 angular2 rc1。我正在开发一个从菜单屏幕开始的简单游戏,当单击菜单按钮时,我想导航到另一个视图,替换 当前视图。然后我想用后退按钮导航回来。

这是一个看似简单的要求,但是,我看到的所有路由示例都使用路由器出口 append 到当前视图而不是替换它。例如

<h1>Component Router</h1>
 <nav>
  <a [routerLink]="['/crisis-center']">Crisis Center</a>
  <a [routerLink]="['/heroes']">Heroes</a>
 </nav>
<router-outlet></router-outlet>

此标记将新视图附加到 </nav> 元素下。

我是不是遗漏了什么明显的东西?有没有一种简单的方法可以做到这一点,还是我需要结合使用 <router-outlet>*ngIf 来隐藏当前视图?

我认为没有其他方法可以做到这一点,您需要使用 *ngIf.

您尝试实现的不是常见模式(正常模式是有一个导航菜单和一个内容菜单),但您所说的游戏可能有意义。

我正在寻找类似的东西(如果我正确理解你的问题)。我的方法(目前)是将路由器出口包装在 div 内,并在加载内容时更改该元素的样式(切换 class 显然会好得多)。

<nav>
  <a routerLink="/dashboard">Dashboard</a>
  <a routerLink="/search">Search</a>
</nav>

<div class="loading-overlay" *ngIf="loading">Cargando...</div>

<div [style.display]="loading ? 'none' : 'block'">
  <router-outlet></router-outlet>
</div>

在 app.component 中我有这个代码(归功于 @borislemke in ):

public loading: boolean = true;

constructor(private router: Router) { }

ngOnInit() {
  this.router.events.subscribe((event: any): void => {
    this.navigationInterceptor(event);
  });
}

navigationInterceptor(event): void {
  if(event instanceof NavigationStart) {
    this.loading = true;
  }
  if(event instanceof NavigationEnd) {
    this.loading = false;
  }
}