angular入门基础教程(十二)动态路由数据传参

路由动态传参

业务场景:

  • 点解商品列表页里面的商品,根据每个商品的 id 进入详情页
  • 其他主要就是不同的类型,展示相同页面的不同数据内容

步骤一:

改造 src/app/app.config.ts,在provideRouter里面加入withComponentInputBinding()

js 复制代码
import { provideRouter, withComponentInputBinding } from '@angular/router';

registerLocaleData(zh);

export const appConfig: ApplicationConfig = {
  providers: [
    ...
    //注入路由,加入withComponentInputBinding()
    provideRouter(routes, withComponentInputBinding()),
    ...
  ],
};

步骤二:

改造src/app/app.routes.ts里面加入id参数

js 复制代码
{
    path: 'goods-detail/:id',
    component: GoodsDetailComponent,
    title: '商品详情',
  }

步骤三:

在需要使用理由跳转的页面,注入路由模块的依赖

改造src/app/components/goods-list/goods-list.component.ts

js 复制代码
import { Component } from '@angular/core';
import { RouterModule } from '@angular/router';

@Component({
  ...
  imports: [RouterModule],
  ...
})

步骤四:

改造src/app/components/goods-list/goods-list.component.html,下面两种跳转方式都行

html 复制代码
<li>
  <!-- <a routerLink="/goods-detail/{{1}}" routerLinkActive="true">啤酒</a> -->
  <a [routerLink]="['/goods-detail',1]" routerLinkActive="true">啤酒</a>
</li>

改成迭代的形式

html 复制代码
<div>
  <ul>
    @for (item of goodsList; track $index) {
    <!-- <li><a routerLink="/goods-detail/{{item.id}}">{{item.title}}</a></li> -->
    <li><a [routerLink]="['/goods-detail',item.id]">{{item.title}}</a></li>

    }
  </ul>
</div>

步骤五:

最后在详情页面进行数据的接受,展示

  • 注入路由模块的依赖,ActivatedRoute
js 复制代码
import { Component } from '@angular/core';
// 导入路由模块的依赖,ActivatedRoute
import { ActivatedRoute } from '@angular/router';
@Component({
  selector: 'app-goods-detail',
  standalone: true,
  imports: [],
  templateUrl: './goods-detail.component.html',
  styleUrl: './goods-detail.component.css',
})
export class GoodsDetailComponent {
  goodsId = 0;
  // 注入路由模块的依赖,ActivatedRoute
  constructor(private route: ActivatedRoute) {
    this.route = route;
  }
  ngOnInit() {
    this.route.params.subscribe((params) => {
      this.goodsId = params['id'];
    });
  }
}
  • 展示数据
html 复制代码
<div>
  <h3>{{goodsId}}</h3>
  <p>goods-detail works!</p>
</div>

这样我们就实现了路由动态传参

相关推荐
Hilaku2 分钟前
为什么很多工作 5 年的前端,身价反而卡住了?🤷‍♂️
前端·javascript·面试
ai超级个体2 分钟前
前端下午茶:这 3 个网页特效建议收藏(送源码)
前端·three.js·threejs·网页设计·vibe coding·网页灵感·网页分享
维斯182 分钟前
VueFlow 图自适应容器尺寸教程
前端
helloweilei3 分钟前
next/dynamic和React.lazy的区别
前端·next.js
Aaron_Feng6 分钟前
一个小工具解决Swift Actor重入问题
前端
笨笨狗吞噬者7 分钟前
维护 uniapp 小程序端近一年,我想拉一个开发者交流群
前端·程序员·uni-app
前端炒粉13 分钟前
React 面试高频题
前端·react.js·面试
程序员陆业聪14 分钟前
让 Android 里的 AI 真正「干活」:Function Calling 工程实现全解
前端
mumuWorld16 分钟前
解决openclaw以及插件安装的报错
前端·ai编程
GISer_Jing17 分钟前
前端组件库——shadcn/ui:轻量、自由、可拥有,解锁前端组件库的AI时代未来
前端·人工智能·ui