Angular 2 Router - 从代码命名的路由器出口导航 [英] Angular 2 Router - named router-outlet navigation from code

查看:24
本文介绍了Angular 2 Router - 从代码命名的路由器出口导航的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

使用@angular/router": "3.4.7".

Using @angular/router": "3.4.7".

提议的解决方案此处不再适用.

Proposed solution here doesn't work anymore.

      /**
        The ProductComponent depending on the url displays one of two info 
         components rendered in a named outlet called 'productOutlet'.
       */
        @Component({
          selector: 'product',
          template: 
          ` <router-outlet></router-outlet>
            <router-outlet name="productOutlet"></router-outlet>
          `
        })
        export class ProductComponent{
         }

@NgModule({
  imports: [
    CommonModule,
    RouterModule.forChild([
          {
            path: 'product',
            component: ProductComponent,
            children: [
              {
                path: '',
                component: ProductOverviewComponent,
                outlet: 'productOutlet'},
              {
                path: 'details',
                component: ProductDetailsComponent,
                outlet: 'productOutlet' }
            ]
          }
      ]

    )],
  declarations: [
    ProductComponent,
    ProductHeaderComponent,
    ProductOverviewComponent,
    ProductDetailsComponent
  exports: [
    ProductComponent,
    ProductHeaderComponent,
    ProductOverviewComponent,
    ProductDetailsComponent
  ]
})
export class ProductModule {

}

手动导航按预期工作

http://localhost:5000/app/build/#/product-module/product(正确显示命名插座中的概览组件)

http://localhost:5000/app/build/#/product-module/product (correctly displays overview component in named outlet)

http://localhost:5000/app/build/#/product-module/product/(productOutlet:details)

(正确显示命名插座中的详细信息组件)

(correctly displays details component in named outlet)

问题

无法找出执行程序导航的正确方法:

Cannot figure out the correct way to perform programatical navigation:

this.router.navigateByUrl('/(productOutlet:details)');

this.router.navigate(['', { outlets: { productOutlet: 'details' } }]);

出现以下错误:

错误:无法匹配任何路由.URL 段:详细信息".

Error: Cannot match any routes. URL Segment: 'details'.

推荐答案

您可以像这样以编程方式导航

You can navigate programatically like this

this.router.navigate([{ outlets: { outletName: ['navigatingPath'] } }], { skipLocationChange: true });

注意:skipLocationChange 用于在地址栏中隐藏 url.

Note: skipLocationChange is use to hide the url from the address bar.

参考官方文档:https://angular.io/guide/router

这篇关于Angular 2 Router - 从代码命名的路由器出口导航的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆