假设我们有一个深层嵌套的架构,其中包含一个主要组件和 3 层子组件。例如:
todo->todo list->todo list action bar->todo list button
还会有其他组件。
当我们使用 EventEmitter 时,我们必须遍历所有层直到 todo 组件。 另一种方法是使用带有可观察对象的通信服务,以便从按钮组件与待办事项组件进行通信。
使用一种方式或另一种方式有哪些优缺点?我应该走什么路?
最佳答案
这是一个设计视角。
通常我发现如果应用程序大小中等到巨大,则使用 Behaviour Subject
或 Replay Subject
将消息传输到其他组件的共享服务.
更好的设计是在 Angular 中使用 redux 来实现 ngrx
i:e。
唯一的缺点是你需要为你的 Action 和 reducer 编写额外的代码,但优点是所有逻辑都与 redux 世界中称为dumb组件的组件分开。一旦完成,使用 ngrx dev tools
随时跟踪状态将是一个救命稻草,您将很容易跟踪触发哪个事件或操作,以及如何调试和制作添加代码。
只有当您的应用程序很小时,我才会建议您使用事件发射器,就像您陷入意大利面条代码中的多个嵌套组件一样。您无法跟踪所有触发事件,然后您最终不得不重新编写代码。
有关使用事件发射器与共享服务的更多信息 LINK .有一个特定的问题。
关于 ngrx 的更多信息 LINK .此链接使用 ngrx v2。
关于Angular EventEmitter 与通过服务进行通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45604836/