重定向到Angular 2 Routing中的新页面

Pra*_*kar 8 routing angular2-routing angular

我有一个场景说主页(带有main.html的app.component.ts),它被默认路由

app.component.ts

@RouteConfig([
    {path: '/',name : 'Home' , component : HomeComponent , useAsDefault: true },
    {path: '/user', name : 'User' , component : UserComponent },
    {path: '/about', name : 'About' , component : AboutComponent},
    {path : 'contact', name : 'Contact' , component : ContactComponent}
])
Run Code Online (Sandbox Code Playgroud)

main.html中

<a [routerLink]="['/Home']">Home</a>
<a [routerLink]="['/User']">User Login</a>
<a [routerLink]="['/About']">About</a>
<a [routerLink]="['/Contact']">Contact</a>

<router-outlet></router-outlet>
Run Code Online (Sandbox Code Playgroud)

现在让我们说想要使用路由器插座路由的2个组件,但对于用户,我想要路由到整个新页面,即不在路由器插座中.我试过navigate并且navigateByUrl不工作它仍然加载它<router-outlet>.请不要建议window.href

我曾尝试在angular2 /路由器中使用Redirect类,但无法做到需要.

Gün*_*uer 6

更新:此答案中的整个路由器配置代码适用于大约6/2016中弃用和删除的路由器

我想你想要的是儿童路线 - 见Plunker

更新了Plunker并导航移至Page1

其中父路由允许之间切换Page1Page2,Page1允许之间切换AboutContactPage2只有User.

Page2也可以是UserComponent直接的,只有当这个页面应该支持多个组件时,才有必要使它成为具有子路由的组件.

您当然可以在之间导航User,例如About使用

router.navigate(['/Page1', 'About']);
router.navigate(['/Page2', 'User']);
Run Code Online (Sandbox Code Playgroud)
import {Component, Directive, Output, EventEmitter} from 'angular2/core'
import {ROUTER_DIRECTIVES, RouteConfig} from 'angular2/router';

@Component({
  selector: 'contact',
  directives: [],
  template: `
  <h2>contact</h2>
`
})
export class ContactComponent {
}
Run Code Online (Sandbox Code Playgroud)
@Component({
  selector: 'about',
  directives: [],
  template: `
  <h2>about</h2>
`
})
export class AboutComponent {
}
Run Code Online (Sandbox Code Playgroud)
@Component({
  selector: 'user',
  directives: [],
  template: `
  <h2>user</h2>
`
})
export class UserComponent {
}
Run Code Online (Sandbox Code Playgroud)
@Component({
  selector: 'page1',
  directives: [ROUTER_DIRECTIVES],
  template: `
  <h2>page1</h2>
  <router-outlet></router-outlet>
`
})
@RouteConfig([
    {path: '/about', name : 'About' , component : AboutComponent, useAsDefault: true},
    {path : '/contact', name : 'Contact' , component : ContactComponent}
])
export class Page1 {
}

@Component({
  selector: 'page2',
  directives: [ROUTER_DIRECTIVES],
  template: `
  <h2>page2</h2>
  <router-outlet></router-outlet>
`
})
@RouteConfig([
    {path: '/user', name : 'User' , component : UserComponent, useAsDefault: true},
])
export class Page2 {
}
Run Code Online (Sandbox Code Playgroud)
@Component({
  selector: 'my-app',
  directives: [ROUTER_DIRECTIVES],
  template: `
  <h2>Hello {{name}}</h2>
  <a href="#" [routerLink]="['/Page1','About']">About</a>
  <a href="#" [routerLink]="['/Page1','Contact']">Contact</a>
  <a href="#" [routerLink]="['/Page2','User']">User</a>
  <router-outlet></router-outlet>
`
})
@RouteConfig([
    {path: '/page1/...',name : 'Page1' , component : Page1 , useAsDefault: true },
    {path: '/page2/...', name : 'Page2' , component : Page2 },
])
export class App {
  constructor() {
    this.name = 'Angular2';
  }  
}
Run Code Online (Sandbox Code Playgroud)