首页 文章

Angular 6带2个路由器插座

提问于
浏览
1

如何确保至少有2个路由器插座并在路由级别管理它们?可以链接我一个工作jsfillde或stackblitz或类似?

编辑重新打开问题

APP组件HTML

<main [@fadeInAnimation]="o.isActivated ? o.activatedRoute : ''">
    <router-outlet #o="outlet" name="main"></router-outlet>
    <router-outlet #o="outlet" name="second"></router-outlet>
</main>

APP MODULE

import { BrowserModule } from '@angular/platform-browser';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { HttpClientModule } from '@angular/common/http';
import { NgModule, APP_INITIALIZER } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';

// components
import { AppComponent } from './app.component';
import { HomeComponent } from './components/home/home.component';

// models
import { Permissions } from '../app/models/permissions';

// guards
import { CanAccess } from '../app/guards/canaccess';
import { OtherComponent } from './components/other/other.component';
import { PageNotFoundComponent } from './components/page-not-found/page-not-found.component';

const permissions: Permissions = new Permissions();

const appRoute: Routes = [
  { path: '', redirectTo: 'home', pathMatch: 'full' },
  { path: 'home', component: HomeComponent, data: { permission: permissions }, canActivate: [CanAccess], outlet: 'main' },
  { path: 'other', component: OtherComponent, data: { permission: permissions }, canActivate: [CanAccess], outlet: 'second' },
  { path: 'pageNotFound', component: PageNotFoundComponent, data: { permission: permissions }, canActivate: [CanAccess], outlet: 'main' },
  { path: '**', redirectTo: 'pageNotFound', pathMatch: 'full' },
];

export function appConfigFactory() {
  try {
      return () => true;
  } catch (e) {
      console.log(`catch load: ${e}`);
  }
}

@NgModule({
  declarations: [
    AppComponent,
    HomeComponent,
    OtherComponent,
    PageNotFoundComponent
  ],
  imports: [
    BrowserModule,
    BrowserAnimationsModule,
    HttpClientModule,
    RouterModule.forRoot(appRoute)
  ],
  providers: [
    CanAccess,
    {
      provide: APP_INITIALIZER,
      useFactory: appConfigFactory,
      deps: [],
      multi: true
    }
  ],
  bootstrap: [AppComponent]
})
export class AppModule { }

错误

错误错误:未捕获(承诺):错误:无法匹配任何路由 . 网址段:'主页'错误:无法匹配任何路由 . 网址细分:'主页'

可以在编辑器上查看https://stackblitz.com/edit/angular-ghusfs

谢谢

1 回答

  • 2

    您可以将父子组件定义为使用多个 router-outlets .

    {
            path: 'shop', component: ParentShopComponent, 
            children : [{
                path: 'hello', component: ChildShopComponent
            }]
        }
    

    您的第一个 <router-outlet> 将位于应用程序组件中,其次是 ParentShopComponent 其余组件可以在子级别或父级别中提供 .

    但是,如果你的亲戚是亲子,那就检查一下Named Router Outlets

    这是主要的路由器OUtlet这些是命名的

    <div class="columns">
      <md-card>
        <router-outlet name="list"></router-outlet>
      </md-card>
      <md-card>
        <router-outlet name="bio"></router-outlet>
      </md-card>
    </div>
    

    这就是你如何使用它们

    { path: 'speakersList', component: SpeakersListComponent, outlet: 'list' }
    

相关问题