如何在Angular中的路由之间推送数据[重复]

Posted

技术标签:

【中文标题】如何在Angular中的路由之间推送数据[重复]【英文标题】:How to push data between routes in Angular [duplicate] 【发布时间】:2019-01-10 14:53:55 【问题描述】:

假设我在路由 /items/ 中获得了一个 item-list 数组。 item-list.component.html 看起来像这样:

<div *ngFor="let item of items">
    ....
  <a [routerLink]="'/items/' + item.id">View Item</a>
</div>

我要做的是将item 对象从item-list 数组推送到下一页(或路由)/items/:item-id.

目前,我设置它的方式是使用 2 个解析器,每个路由一个: 1. 获取物品列表 2.通过id获取项目

我意识到这些路由之间存在不必要的 API 调用,因为我需要的项目对象已经在数组中。如果项目不存在(由于页面刷新或直接链接),我计划重构解析器调用 API

我该如何处理?

注意:在 Ionic3 中,可以这样完成:navCtrl.push('ItemPage', item: item);

【问题讨论】:

【参考方案1】:

注意:在 Ionic3 中,可以这样完成:navCtrl.push('ItemPage', 项目:项目);

你可以用 router 做同样的事情:

this.router.navigate(['./item-page', item: item]);

然后在您的下一页中,将其添加到ngOnInit

ngOnInit() 
    this.route.params.subscribe(params => 
       console.log(params);
    );
  

【讨论】:

你不能像这样传递整个对象,它不会工作,它只会将它作为查询参数传递,而不是实际的对象。【参考方案2】:

使用服务。除了简单值之外,您不能将数据传递给路由。

export class FirstComponent 
   constructor(private someService: SomeService)

   someMethod(item) 
     this.someService.currentItem = item;
   


export class SomeService 
  currentItem: any;


export class SecondComponent 
   constructor(private someService: SomeService)

   someMethod() 
    // now you have the item
    this.currentItem.....
    

而不是router链接到一个路由,使用该方法重定向并将项目添加到服务中:

所以而不是

<a routerLink

做:

*ngFor="let item of items"
<button (click)="route(item)"

myMethod(item) 
  this.someService.currentItem = item;
  this.router.navigate('/route....')

语法不准确;这只是一个例子

【讨论】:

以上是关于如何在Angular中的路由之间推送数据[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在Angular2中的组件之间共享数据[重复]

如何在Angular 8中未调用的组件之间传递数据[重复]

如何在Angular中的路由之间传递非字符串对象?

Angular 2 Dart:如何在父组件与路由器和子组件之间共享变量?

如何将数据共享到 Angular 中的另一个组件?

Angular2:通过路由器在兄弟组件之间传递数据?