Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Multiple named router-outlet angular 2

I want to display different views by child routes. For Example I want my template to hold multiple router-outlet

Version: @angular/router": "3.0.0-alpha.7"

<router-outlet></router-outlet>
<router-outlet name="route1"></router-outlet>
<router-outlet name="route2"></router-outlet>

In my router i want to specify the name of router.

As i saw in a question, the solution for this is to specify AuxRoute, but AuxRoute does not exist in this version.

{path: '/',        component: HomeComponent, as: 'Home'},
new AuxRoute({path: '/route1', component: Route1Component, as: 'Route1'}),
new AuxRoute({path: '/route2', component: Route2Component, as: 'Route2'})

While on angular 2 official website i found that it is possible to have multiple router, but i can't find any resource.

https://angular.io/docs/ts/latest/guide/router.html

A template may hold exactly one unnamed <router-outlet>. The router supports multiple named outlets, a feature we'll cover in future.

like image 656
Prince Avatar asked Jun 26 '16 11:06

Prince


People also ask

Can there be multiple router outlet in Angular?

You can have multiple router-outlet in same template by configuring your router and providing name to your router-outlet, you can achieve this as follows.

How many router outlets can be used in an Angular application?

There is no limit in angular but there are some best practices of using multiple place one in app.

Can I use multiple router outlets in Angular 8?

Yes! We can use multiple router-outlets in same template by configuring our routers and simply add the router-outlet name. You can see in the example.


1 Answers

Current version multiple-named router-outlet (for angular2 RC.6^) looks like this:

Router configuration

const appRoutes: Routes = [{   
    path: 'home',
      component: HomeComponent,
      children: [
        { path: '', component: LayoutComponent },
        { path: 'page1', component: Page1Component, outlet: 'route1' },
        { path: 'page2', component: Page2Component, outlet: 'route2' },
        { path: 'page3', component: Page3Component, outlet: 'route3' }
      ]
    }, {
      path: 'articles',
      component: ArticlesComponent,
      children: [
        { path: '', component: LayoutComponent },
        { path: 'article1', component: Article1Component, outlet: 'route1' },
        { path: 'article2', component: Article2Component, outlet: 'route2' }
      ]
    },  { 
      path: '', 
      redirectTo: '/home',
      pathMatch: 'full'
   }
];

Template within Home component:

<router-outlet></router-outlet>
<router-outlet name="route1"></router-outlet>
<router-outlet name="route2"></router-outlet>
<router-outlet name="route3"></router-outlet>

And a navigation example from root component:

constructor(router: Router) {
  router.navigateByUrl('/home/(route1:page1//route2:page2//route3:page3)');
} 

Alternative way:

<a [routerLink]="['/home', { outlets: {'route1':['page1'],'route2': ['page2'] }}]"></a>

Here's live Plunker Example

See also

  • Named Router Outlets in Angular 2
like image 138
yurzui Avatar answered Oct 18 '22 20:10

yurzui