Angular 使用@Input和路由器出口在组件之间传递数据?

Angular 使用@Input和路由器出口在组件之间传递数据?,angular,router,router-outlet,data-handling,Angular,Router,Router Outlet,Data Handling,在组件之间传递数据的最简单方法是什么?我知道,对于Parent->child,您应该使用@Input,但是如果您使用的是router outlet,那么它看起来并没有什么用处,因为您需要访问孩子的模板(我不知道,当您使用router outlet时,您如何能做到这一点)和/或大型应用程序。 除此之外,只有正确的服务才能实现,对吗 这似乎是一个很好的解释,但我无法将其转化为我的问题。因为我在一个更大的项目上(初级,在工作中学习),所以我不能在这里和那里突然提出一些价值观 另外,我从一个服务开始,但

在组件之间传递数据的最简单方法是什么?我知道,对于Parent->child,您应该使用@Input,但是如果您使用的是router outlet,那么它看起来并没有什么用处,因为您需要访问孩子的模板(我不知道,当您使用router outlet时,您如何能做到这一点)和/或大型应用程序。 除此之外,只有正确的服务才能实现,对吗

这似乎是一个很好的解释,但我无法将其转化为我的问题。因为我在一个更大的项目上(初级,在工作中学习),所以我不能在这里和那里突然提出一些价值观


另外,我从一个服务开始,但我的上司说我不需要它,但是服务使用对我来说似乎是合理的。

您可以肯定地与服务共享数据,尽管这可能被视为一种代码气味,因为您通常会尝试避免服务中的状态

但根据我的经验,让组件自行负责通常更好。因为这些页面是同级的,所以我会考虑让同级组件也负责获取数据

如果数据足够小或只有一些id,另一种方法是使用查询字符串参数传递数据


编辑:另一种选择是使用像NGRX这样的库,但这在设置时会有很多开销。

您肯定可以与服务共享数据,尽管这可能被视为代码气味,因为您通常会尝试避免服务中的状态

但根据我的经验,让组件自行负责通常更好。因为这些页面是同级的,所以我会考虑让同级组件也负责获取数据

如果数据足够小或只有一些id,另一种方法是使用查询字符串参数传递数据


编辑:另一种方法是使用像NGRX这样的库,但这将在设置过程中产生大量开销。

如果要传递路由参数,你需要创建一个不同的组件,从路由参数中获取并转换你所需要的,并将它们作为输入传递给子组件。最好的方法是ngrx,但这并不容易,或者你可以看看@Whisher,我宁愿编写一个服务来处理通信,而不是折磨自己。一些有棱角的文档对我来说似乎很平淡,包括这一个。如果你想传递路由参数,你需要创建一个不同的组件,从路由参数中获取并转换你所需要的,并将它们作为输入传递给子组件。最好的方法是ngrx,但这并不容易,或者你可以看看@Whisher,我宁愿编写一个服务来处理通信,而不是折磨自己。一些有棱角的文档对我来说似乎很平淡,包括这一个。尽管我喜欢放松我的生活,但我不能摆弄依赖关系之类的东西。这是一个正在进行的项目,我认为我太年轻了,无法对其产生影响。如果没有完成服务,您如何通过“内置”角度工具在组件周围传递数据?如果NGRX不是选项,您从哪里获得需要传递的数据?您可以从REST调用访问相同的数据吗?如果是这样,您可以让同级组件负责获取数据。该服务最大的问题是您必须管理服务中的有状态数据,这通常是不可取的。另一个选项是你可以将其放入本地存储或类似的东西。我有两个组件:一个是获取用户列表的列表,如果你单击一个用户,它会将你路由到编辑页面,在那里你应该编辑该用户并从列表中获取数据(这是我目前失败的地方)。我可以从编辑组件中再次调用其余部分,但这不是在消耗资源吗?要再次调用它,即使我也应该拥有数据,因为列表组件知道它。是的,您应该进行REST调用并获取单个用户。根据API的不同,在单个页面上可能需要比列表页面更多的信息,并且可能返回不同的DTO。另外,由于您使用的是angular router,如果有人通过链接而不是列表打开页面,会发生什么情况?如果您使用服务来存储数据,那么您的页面将无法工作。一般来说,RESTAPI的设计是为了接收许多小请求。尽管我很想让生活变得轻松,但我不能处理依赖关系之类的问题。这是一个正在进行的项目,我认为我太年轻了,无法对其产生影响。如果没有完成服务,您如何通过“内置”角度工具在组件周围传递数据?如果NGRX不是选项,您从哪里获得需要传递的数据?您可以从REST调用访问相同的数据吗?如果是这样,您可以让同级组件负责获取数据。该服务最大的问题是您必须管理服务中的有状态数据,这通常是不可取的。另一个选项是你可以将其放入本地存储或类似的东西。我有两个组件:一个是获取用户列表的列表,如果你单击一个用户,它会将你路由到编辑页面,在那里你应该编辑该用户并从列表中获取数据(这是我目前失败的地方)。我可以从编辑组件中再次调用其余部分,但这不是在消耗资源吗?要再次调用它,即使我也应该拥有数据,因为列表组件知道它。是的,您应该进行REST调用并获取单个用户。根据API的不同,在单个页面上可能需要比列表页面更多的信息,并且可能返回不同的DTO。另外,由于您使用的是angular router,如果有人通过链接而不是列表打开页面,会发生什么情况?如果您使用服务来存储数据,那么您的页面将无法工作。一般来说,RESTAPI设计用于接收许多小请求。