gpt4 book ai didi

angularjs - 大量使用事件来保持 Controller 在复杂的 Angular 应用程序之间同步的优点/缺点

转载 作者:行者123 更新时间:2023-12-03 00:03:33 25 4
gpt4 key购买 nike

任何人都可以给我一些关于大量使用事件来保持 Angular 应用程序的不同部分彼此同步的利弊的建议吗?

我正在考虑使用一系列事件和事件监听器将 SPA 与多个并发和嵌套 View 连接在一起,由 Angular 的 ui-router 提供。 SPA 的布局类似于 gmail,其中有逻辑上独立的屏幕区域(左侧区域包含邮件文件夹列表、顶部导航栏、主要详细信息 View 等)。

我一直在寻找使所有 Controller 与它们需要同时访问的模型保持同步的方法。当顶 View 更新模型时,如果该模型的某些部分显示在主视图中,我希望主视图注意到更改,并相应地更新其 View 。

我使用服务在 Controller 之间共享模型,这被认为是最佳实践,但该方法存在一些问题,如深入讨论的 in this question

对此的一个可能的解决方案是使用 Angular 的 $broadcast.$on('event, fn()) 让 Controller 在他们关心的服务时发出通知已更新数据。

问题:

  1. 使用事件传递数据而不是使用服务(紧耦合,忽略任何权威数据源)。我知道您可以通过事件传递对象,但您不必这样做。

  2. 性能(事件在整个 $scope 层次结构中冒泡,等等)。

    $broadcast/$emit 具有性能和紧耦合问题,这些问题在此处和其他地方都有大量介绍,我正在考虑使用 SO 答案 here 中的解决方案解决 Controller 被销毁时不清理监听器导致的性能/内存泄漏问题。

  3. 维护(意大利面条代码/忽略面向对象,只是在事件中传递整个应用程序的模型)。这是我向社区提出的主要问题:根据下面的(丑陋的)图表,我想象每个 Angular .service 在获取更新的模型数据时都会触发一个事件,以及任何关心该事件的 Controller data 只是监听要触发的事件: Event Wiring Diagram

实际上,编码很简单(现在可以使用),但我担心 5 年后尝试跟踪所有事件关系会带来麻烦。

有没有人有这样的设计经验,谁可以给我一些关于更智能/更简洁的设计的建议?

提前致谢,并对粗略的图表表示歉意...希望它能够表达要点。

最佳答案

优点?

  • 它让 Angular 更像 Knockout/Durandal?

缺点?

  • 它让 Angular 更像 Knockout/Durandal?

我已经回答了您链接的问题之一:here所以这可能对你有帮助。

这也可能回答您评论中的问题。

我的建议是不要放弃面向对象。但是拥抱它吧,Angular 将通过一直工作来奖励你。

如果您在之前链接的问题中有一个带有密码字段的 User 对象,您将永远不会遇到此问题,因为密码始终可以通过用户引用。所有与 User.password 的绑定(bind)都会起作用。

因此只有一个数据源。保留该引用。您的双向绑定(bind)将修改该数据。您不必担心在事件中将其传播到整个应用程序。

关于angularjs - 大量使用事件来保持 Controller 在复杂的 Angular 应用程序之间同步的优点/缺点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21416854/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com