【问题标题】:How to create multiple parameters with routeLink如何使用 routeLink 创建多个参数
【发布时间】:2017-05-16 03:06:05
【问题描述】:

我在这条活跃的路线上:

companies/:id/departments 

现在我想用这条路线创建一个新部门:

companies/:id/departments/create

我通过 routeLink 更改此路线的 html 是这样的:

 <button [routerLink]="['companies', id, 'departments','create']">create</button>

当我单击 routerLink 时收到此错误消息:

Error: Cannot match any routes: 'companies/1/departments/companies/1/departments/create'

很明显,我的 routerLink 路由已附加到活动路由。

我应该如何重写我的 routerLink 以使其工作?

路由器是否假定创建路由是子路由?不是!

【问题讨论】:

    标签: angular angular2-routing


    【解决方案1】:

    如何将其更改为:

     <button [routerLink]="['create']">create</button>
    

    【讨论】:

    • 为什么会这样?当我查看文档时,只有这个(取自 AArias 评论):“......或不以斜杠开头,路由器将改为查看当前激活路由的子级......”但我是无法在“创建”和当前激活路由的子节点之间建立连接,因为在我的情况下不存在子路由。
    • 是的,它可以工作,但是...... AArias 也可以。我不喜欢 API 提供的多种方式,这迟早会导致代码或开发人员方面的错误。似乎 AArias 方法是绝对 url,而您的方法是相对 url 方法。
    • @Pascal 之所以有效,是因为您的按钮仅存在于路径 /companies/:id/departments 中,并且正如您所指出的,路由到 create 告诉 angular 使用相对方法,从而生成正确的 url @ 987654324@。如果所有可能的视图中都存在相同的按钮(例如,在侧边栏或导航栏中存在的组件中),您将需要使用我的回答中描述的绝对 url 方法,因为对于任何其他路径,相对方法不会有效。我倾向于总是使用绝对路径,因为它不容易出错并且使代码可重用。
    【解决方案2】:

    根据documentation

    如果第一段以/开头,路由器会查找路由 从应用的根目录。

    如果第一段以 ./ 开头,或者 不以斜线开头,路由器将改为查找 当前激活路由的子节点。

    如果第一段 以../开头,路由器会上一级。

    所以基本上,您需要做的就是在第一段之前添加一个正斜杠:

    <button [routerLink]="['/companies', id, 'departments','create']">create</button>
    

    【讨论】:

    • 你的也有效,但更长,但你晚了一点;-)所以我赞成!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-11
    • 2015-02-25
    • 2015-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多