【问题标题】:Routing issue in angular while define routing with parameter使用参数定义路由时出现角度路由问题
【发布时间】:2020-04-23 11:28:42
【问题描述】:

我有两条这样定义的路线

children: [
                            {
                                path: 'Templates', component: TemplatesComponent
                            },
                            {
                                path: 'AddEditTemplate/:id', component: AddTemplatesComponent
                            }]

我在 AddTemplatesComponent 视图上有“取消”按钮

<a class="btn btn-default no-margin" [routerLink]="['../Templates']">Cancel</a>

但单击取消按钮时,它不会导航到“模板”组件,并且 url 从“/AddEditTemplate/5”更改为“/AddEditTemplate/Templates”。但是 url 应该改为“/Templates”。

我做错了什么?请帮忙。

【问题讨论】:

    标签: angular routes angular-routing


    【解决方案1】:

    事实上,您必须在路径中向上走 2 条路线。例如,假设您在root/AddEditTemplate/2。如果您在路径中向上走 1 条路线,您将位于 root/AddEditTemplate。因此,要再次进入root 以到达root/Templates,您应该在路径中向上走2 条路线:

    <a class="btn btn-default no-margin" [routerLink]="['../../Templates']">Cancel</a>
    

    签出这个Stackblitz demo => 只关注module-1 文件夹内的文件。

    [更新]:如果你想以编程方式导航,你可以使用 Routernavigate 方法和两个参数:与上面相同的路由和一个包含 @ 的配置选项987654331@属性指定当前路线作为起点计算相对路径。根据docs如果没有提供起始路线,导航是绝对的

    constructor(
      private _router: Router,
      private _activatedRoute: ActivatedRoute
    ) {}
    
    ...
    
    _navigate() {
      this._router.navigate(['../../Templates'], {
        relativeTo: this._activatedRoute
      });
    }
    

    【讨论】:

    • 它适用于按钮。谢谢。但我也想通过 ts 文件使用路由器导航。我正在使用此代码“this._router.navigate(['../../Templates']);”。但它给了我错误“无法匹配任何路由。URL 段:'模板'”。有什么解决办法吗?谢谢。
    • 我的建议是:如果您不使用图书馆,请不要使用相对路线。如果你没有以正确的方式做,它会扼杀你的组件的可重用性。
    • 我现在不在计算机附近,但我记得导航方法有一个对象作为第二个参数,您可以在其中指定导航与某些特定路线相关。尝试查看文档。后面我会看,但是很奇怪,因为我认为默认是考虑相对于当前路线的导航。
    猜你喜欢
    • 2021-11-12
    • 2014-11-10
    • 1970-01-01
    • 2018-05-17
    • 2017-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多