我有这种型号的 <a>

<a class="card_img"  [href]="'/Detail/' + food.id">

路由如下所示:

  {
    path: "Detail/:{Id}",
    component: DetailInfoComponent
  }

我得不到Id分,我用了这个方法

this.route.params.subscribe(params => {
     this.foodID = params['Id'];
   });

foodID是未定义的.Wrere is my fault and how i can get ID correctly?

推荐答案

您可以使用快照或可观测对象从路由中获取ID.我更喜欢可观察的,因为URL有时可以编程方式更改,如果模板/视图也更新就好了.

路由文件必须如下所示(不带大括号):

 {
    path: "Detail/:Id",
    component: DetailInfoComponent
 }

因为您希望等待数据绑定准备就绪,所以可以在ngOnInit生命周期钩子中访问它.


  // On top of your Class - For unsubscribing from observables automatically - Injection context
  private destroyRef = inject(DestroyRef);

  ngOnInit() {
    this.route.params.pipe(
      takeUntilDestroyed(this.destroyRef)
    ).subscribe(params => {
     console.log(params);
     this.foodID = params['Id'];
   });

  }

还添加了一个console.log,以确保您正在获取值,并且没有其他任何操作.

要使用快照获取它,您可以做(确保将0替换为您期望id的索引:

const foodID = this.route.snapshot.url[0]!.path;

请记住,并不是每个平台上的文件名和文件夹都区分大小写.就我个人而言,我只在应用程序中使用小写,但这可能是我个人的偏好.

此外,不使用[href],而是使用[routerLink]来正确使用ANGING的路由.例如.

<a class="card_img" [routerLink]="['/Detail/', food.id]">

这将按预期推送和弹出导航堆栈.但是,请确保在您的导入中包括RouterModule.[routerLink]期望字符串或路径元素array.

Html相关问答推荐

HTML::Element endtag为br和IMG生成结束标签>

我已经在我的网站上创建了按钮,但我不能让它们正确排列.'

Chrome和Safari浏览器中的CSS3动画不同

如何阻止Chromecast图标出现在HTML5视频

如何在图像中垂直和水平居中显示文本?

为什么不是所有字体好的图标都能与boostRapCDN一起使用呢?

未在抖动中播放的HTML音频||文本正在工作其他标记正在播放,但音频未播放

Flexbox在元素之间造成了太大的差距

浮动Div在CSS中未按预期工作

配置了 HTML 视口的 Google Apps 脚本移动网络应用程序无法正确显示

30000ms后超时重试:期望找到元素:someElement,但从未找到它

Angular MatBadge 在高于 99 时不显示完整数字

如果使用复选框属性更改,如何防止事件更改?

复制两个

会产生一个空行;复制

元素不会

jQuery 索引返回不正确的结果

如何将内容放置在侧边栏旁边?

对齐页面左侧的单选按钮

在带有换行文本的工具提示中显示溢出文本

如何将自定义图像插入 Shiny plot header?

使用 htmloutput 在shiny 的应用程序中呈现文本