如何保持角度2的状态?

时间:2016-04-29 07:04:43

标签: angular

我只是围绕角度2,并着眼于设计向导类型的应用程序。第1页上的组件需要将数据传递给其他页面上的组件。考虑使用服务来保持在向导的下一个视图/组件中注入的状态/数据。整个事情应该松散耦合。我不认为设计一个可观察的模式是有用的,因为在下一个页面/视图之一上的组件尚不可见。角度2中的哪些新功能可以用来解决这个问题?

2 个答案:

答案 0 :(得分:9)

我建议使用例如Redux集中管理您的州。然后,您将使用角度的@Input()和@Output()将状态传播到组件,并从组件中调度状态更改。

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

通过这种方式,您的个人组件无需了解状态的存储和更新方式,只需提供功能并接受可对其功能产生预期效果的输入参数。

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

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

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

请注意,您可以使用常规的angular2服务来保持状态,但像Redux这样的东西可以免费提供一些东西,比如提供的开发工具。如果你使用Redux,也可以看看Immutable.js,因为重要的是不要直接使用Redux改变状态。

答案 1 :(得分:7)

检查@ngrx/store

  

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