Angular 如何在路由组件之间传递数据
How to pass data between routed components in Angular
我有一个这样的路由组件:
来自组件 A:我有一个通过 API 获取的对象,目前我有一个将我重定向到组件 B 的按钮。
组件A和B之间没有父子关系。
我想做的是在重定向到组件 B 的同时发送该对象,这样我就可以处理它了。
我不想像这样通过 URL 传递数据:
return this.router.navigate(['associate-product/' + this.id, {this.data}]);
我也不想将对象存储在 LocalStorage 上。
有办法实现吗?
您可以使用具有主题/行为的服务来实现这一点,如他们的 docs
中所述
使用服务,您可以通过注入服务的组件共享数据。
我创建了一个 stackblitz,其中有一个小例子,可以共享数据并知道何时从 API 检索数据。
在此示例中,您有 2 个组件 A 和 B,以及一个服务“example”。
在你的第一个组件 (A) 上你调用 API 来获取数据,在这个例子中我做了一个 seTimeout 来模拟一个异步调用。
然后,当调用结束时,可以显示一个移动到b的按钮,并且在组件b上有从超时中检索到的数据。
使用路由
如果要使用路由将数据从一个组件传递到另一个组件,可以使用 NavigationExtras
。
在 CompA 中你可以做:
constructor(private router: Router){
}
goToCompB(){
this.router.navigate(['associate-product/' + this.id], {
state:{
data: yourDataToShareWithCompB
}
});
}
在 CompB 中你可以做:
constructor(private router: Router){
const data = router.getCurrentNavigation().extras.state.data;
}
PS:您也可以使用其他人回答的基于服务的模式
我有一个这样的路由组件:
来自组件 A:我有一个通过 API 获取的对象,目前我有一个将我重定向到组件 B 的按钮。
组件A和B之间没有父子关系。
我想做的是在重定向到组件 B 的同时发送该对象,这样我就可以处理它了。
我不想像这样通过 URL 传递数据:
return this.router.navigate(['associate-product/' + this.id, {this.data}]);
我也不想将对象存储在 LocalStorage 上。
有办法实现吗?
您可以使用具有主题/行为的服务来实现这一点,如他们的 docs
中所述使用服务,您可以通过注入服务的组件共享数据。
我创建了一个 stackblitz,其中有一个小例子,可以共享数据并知道何时从 API 检索数据。
在此示例中,您有 2 个组件 A 和 B,以及一个服务“example”。
在你的第一个组件 (A) 上你调用 API 来获取数据,在这个例子中我做了一个 seTimeout 来模拟一个异步调用。
然后,当调用结束时,可以显示一个移动到b的按钮,并且在组件b上有从超时中检索到的数据。
使用路由
如果要使用路由将数据从一个组件传递到另一个组件,可以使用 NavigationExtras
。
在 CompA 中你可以做:
constructor(private router: Router){
}
goToCompB(){
this.router.navigate(['associate-product/' + this.id], {
state:{
data: yourDataToShareWithCompB
}
});
}
在 CompB 中你可以做:
constructor(private router: Router){
const data = router.getCurrentNavigation().extras.state.data;
}
PS:您也可以使用其他人回答的基于服务的模式