在控制器之间共享非单一状态(Angular Architecture)

时间:2014-09-04 11:09:49

标签: javascript angularjs angularjs-scope

在我现在的公司,我们正致力于一个非常大的角度应用。持续争用的一个要点是弄清楚在控制器之间共享非单一状态的最佳方法是什么。在理想情况下,控制器共享一个恰好是单身的状态,我们可以将该状态建模为service,并使用此controllers通过{{1}在service之间进行通信它。

但我们希望拥有此层次结构的多个实例,这意味着拥有单例将无济于事。我们需要的是基于上下文的单例,它也可以是可注射的。

我们目前正计划通过指令层次结构执行此操作,其中最顶层指令的控制器管理状态,然后所有较低指令inject此控制器(指令控制器用于指令通信!)和调用功能就可以了。这样做的问题是所需的控制器只能在指令的链接功能中访问(这不是很糟糕,但由于大多数情况都会发生在这种状态下,因此测试会变得更加困难。!链接功能更难以实现测试比控制器。你可以直接注入控制器并测试它们。

我相信还有其他人可能面临类似的情况并提出了一个令人满意的解决方案!

考虑这样的层次结构(例如)以便更好地理解:

require

.... n每个m级深度发布..

这里的示例是一个简单的例子,在DOM中只有1级深度。考虑到在应用程序中我们有4-5级深度指令。我们沿着隔离范围路径走下去,并将所需的值传递给子指令。这种方法有效,但主要是因为如果第5级的指令需要某些东西 - 中间的所有指令都必须对该数据进行编组(并公开一个范围变量,除了将此值传递到下一级别之外没有做任何事情这看起来非常脆弱。

如果您对如何解决这个问题有很好的建筑眼光 - 请告诉我们。如果您对什么有效或什么不会有任何建议 - 这也会很棒。如果你知道用于解决这个问题的不同方法的相对优点和缺点 - 那也会很好。

1 个答案:

答案 0 :(得分:0)

如果我正确地考虑了这一点,示例中的<post>元素会有一些与之关联的状态对象,并且需要将其传递给<header>,依此类推。< / p>

我通过在html级别将对象附加到作用域来实现此目的。所以<post item="items[0]">,然后帖子模板中有<header item="item">等等。使用isolate scope = type,更改会在DOM树中上下传播,因为它只是一个将数据保存在其中的javascript对象。

你也可以使用指令控制器层次结构,但这意味着像<button-array>这样的东西在它们出现在模板中的地方是硬连线的(如果你按照地方推下或拉出一个子指令它出现在整个重复对象的DOM层次结构中,这会破坏事物),而直接将状态传递到每个项目中工作正常。

我只会根据我所说的“模型状态”进行此操作。 - 你最终可能会在某个地方发布到服务器的东西。发布标题和内容,标签等。视图状态(对象的展开 - 折叠)在内部处理到组件并用于检测组件的边界(如果两个组件紧密绑定到足以需要访问其他组件&#39 ;查看状态,然后他们实际上是一个组件。)