【问题标题】:routerLink to route with parameters not workingrouterLink 路由参数不起作用
【发布时间】:2018-02-14 22:32:18
【问题描述】:

我的页面上有一个routerLink,它转到了某个路线,但我收到了这个错误

基本上,我有一个具有唯一 ID 的资产页面,然后当您单击按钮时,ID 会更改,并且路线应该更新,因此资产/sa3384320402 应更改为资产/i44309509439 新 ID

我的routerLink如下

<button [routerLink]="['/asset', newId]">click</button>

我的路由页面

@NgModule({
imports: [
    RouterModule.forChild([
        {
            path: '',
            children: [
                { path: 'week-1', component: Week1Component },
                { path: 'week-1/asset/:id', component: AssetPageComponent }
            ]
        }
    ])
],

还有我的asset-page.component.ts

import { Component, OnInit, AfterViewInit } from '@angular/core';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/switchMap';
import { ActivatedRoute, ParamMap, Router } from '@angular/router';
import { Entry } from 'contentful';
import { ContentfulService } from '../../../contentful.service';

import * as _ from 'lodash';

declare var Player: any;
declare var Vimeo: any;

@Component({
  selector: 'app-asset-page',
  templateUrl: './asset-page.component.html',
  styleUrls: ['./asset-page.component.scss']
})
export class AssetPageComponent implements OnInit {
  asset: Entry<any>[];
  id: string;
  videoID: string;

  constructor(
    private contentfulService: ContentfulService,
    private route: ActivatedRoute,
    private router: Router
  ) { }

  ngOnInit() {
    this.route.paramMap
    .switchMap((params: ParamMap) => this.contentfulService.getAsset(params.get('id')))
    .subscribe((asset) => {
      this.asset = asset;
      console.log(this.asset);
    });
   }
}    

我不确定发生了什么,因为如果我走那条路线,它确实可以通过 routerLink 工作?

任何帮助将不胜感激!

谢谢

编辑

我已经尝试了以下这些结果

&lt;button [routerLink]="['/week-1/asset', newId]"&gt;click&lt;/button&gt; - 与上述相同的错误

&lt;button [routerLink]="['asset/', newId]"&gt;click&lt;/button&gt; - 只是将新路由添加到旧路由的末尾

&lt;button [routerLink]="['asset', newId]"&gt;click&lt;/button&gt; - 只是将新路由添加到旧路由的末尾

【问题讨论】:

    标签: javascript angular typescript


    【解决方案1】:

    您尝试访问的路径是“/asset/:id”,但您的路径定义为“/week-1/asset/:id”。因此,您需要提供路由器链接的完整路径,如下所示:

    <button [routerLink]="['/week-1/asset', newId]">click</button>
    

    或者假设您已经在第 1 周路线,您可以通过省略第一个正斜杠来提供相对路径:

    <button [routerLink]="['asset', newId]">click</button>
    

    【讨论】:

    • 如果我这样做&lt;button [routerLink]="['/week-1/asset', newId]"&gt;click&lt;/button&gt; 我得到与上面Cannot match any routes. URL Segment: 'week-1/asset/3SrqtB4haMCI8AsoEM84w4' 相同的错误,如果我在资产前面没有正斜杠它只是将新路由添加到旧路由的末尾
    • 开头的正斜杠定义了一个绝对路由,所以当你离开它时,应该按照设计将路由附加到当前路由。你的按钮在哪条路线上?
    • 所以该按钮在资产页面上,所以 /asset/a32f0f0sdfew9es 正确,但我想要做的是在此按钮上单击更改资产页面上的 ID,请参阅更新的问题我不认为我足够具体
    • 这并不是让它正常工作所需要的,但它确实为我指明了修复它的正确方向
    • 到底是什么问题?我完全不知道为什么上述方法不起作用,所以我真的很想知道什么是有效的。
    【解决方案2】:

    试试这个按钮:

    <button [routerLink]="['asset/', newId]">click</button>
    

    【讨论】:

    • 所做的只是将其添加到当前路线的末尾 week-1/asset/jiWG0Ufzlm4ccUsuYsuWQ 变成 week-1/asset/jiWG0Ufzlm4ccUsuYsuWQ/week-1/asset/jiWG0Ufzlm4ccUsuYsuWQ 与资产相同
    • 试试asset/
    • 再一次,它只是将新路线添加到当前路线的末尾
    • 尝试在routing page 文件中交换这两条路线的位置?
    • 我想到的最后一件事是尝试将 routing page 文件中的 week-1/asset/:id 更改为 asset/:id 并告诉我们它成功了吗?
    猜你喜欢
    • 2020-08-12
    • 1970-01-01
    • 2016-12-15
    • 2019-05-05
    • 2021-01-13
    • 2016-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多