Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在angular 2中保持状态?_Angular - Fatal编程技术网

如何在angular 2中保持状态?

如何在angular 2中保持状态?,angular,Angular,我只是想了解angular 2,并考虑设计一个向导类型的应用程序。第1页上的组件需要与其他页上的组件通信数据。考虑使用服务来保存状态/数据,这些状态/数据将注入向导的下一个视图/组件中。整个过程应该是松散耦合的。我不认为设计一个可观察的模式是有用的,因为下一个页面/视图上的组件还不可见。angular 2中的哪些新功能可以用来解决这个问题?我建议使用例如将您的状态集中化。然后使用angular的@Input()和@Output()将状态传播到组件,并从组件中分派状态更改 您将拥有一个订阅状态更改

我只是想了解angular 2,并考虑设计一个向导类型的应用程序。第1页上的组件需要与其他页上的组件通信数据。考虑使用服务来保存状态/数据,这些状态/数据将注入向导的下一个视图/组件中。整个过程应该是松散耦合的。我不认为设计一个可观察的模式是有用的,因为下一个页面/视图上的组件还不可见。angular 2中的哪些新功能可以用来解决这个问题?

我建议使用例如将您的状态集中化。然后使用angular的@Input()和@Output()将状态传播到组件,并从组件中分派状态更改

您将拥有一个订阅状态更改的顶级组件,并使用子组件@Inputs传播这些更改。您的子组件将使用@Outputs()向顶级组件发出状态更改请求,而顶级组件又会更新中心状态

通过这种方式,您的单个组件不必知道状态是如何存储和更新的,它们只需提供功能并接受可能对其功能产生预期效果的输入参数

如果您有许多深度嵌套的组件,它们本身也使用@Input()和@Output()来提供功能,并且不直接与任何状态存储通信

我自己使用这种方法,它使每个组件都非常精简和可重用,同时使跟踪您的状态变得非常容易,并大大降低了跨组件同步状态的复杂性

此外,您还应该查看和ChangeDetectorRef,因为您可以使用此方法简化组件更改检测。您的所有子组件通常都可以使用所谓的OnPush检查策略,这意味着它们的更改检测只会在@Input()属性发生更改时运行。因为这是在这种情况下状态改变的唯一方式,所以您可以告诉angular,否则就不能检查更改。这也有助于提高性能

请注意,您可以仅使用常规的angular2服务来保持状态,但Redux之类的服务会免费为您提供一些东西,例如提供的开发工具。如果使用Redux,还可以查看Immutable.js,因为不要直接使用Redux改变状态很重要。

检查

RxJS支持的状态管理受Angular2应用程序Redux的启发


请添加一些代码来演示您试图完成的任务。Angular为父子关系提供了
@Input()
@Output()
(在某种程度上为兄弟关系提供)以及所有其他路由的服务。如何将旧的良好参数从一条路由传递到另一条路由?您可以使用带有RxJS
BehaviorSubject
的服务,以确保尚未可见的组件在初始化时获得最新数据。谢谢,这是一个很好的方法!对于嵌套较深的子组件,如何将状态更改一直返回到保持视图/应用程序“主”状态的顶级组件?您是否有一条通向顶部的输出链,或者是否有一条捷径可用于绕过这些类型的链?通常,您会有一条通向顶部的输出链。如果它太过嵌套,以至于无法轻松使用,那么可能值得考虑将顶级组件的职责划分为多个组件,这些组件正在操作和订阅集中状态的不同区域。我还没有完全掌握最佳实践和/或angular“希望”我这样做的方式。在大多数情况下,我一直依赖于大量的输入和输出,但最近我意识到我可以向服务添加一些属性,并将其注入到我需要保存状态的组件中。服务本质上是更“集中的存储”——也许这就是Redux所做的,只是更复杂而已?还是不?我使用服务和依赖DI而不是大量输入/输出的方法是否存在任何问题。我只是觉得注入服务更容易。我想我已经明白我的评论有多幼稚了。我不仅已经在我的应用程序中使用了Redux,而且现在我正在使用它精确地完成我所要求的任务(至少在组件/服务之间的通知方面,不一定是状态的存储):