在控制器之间共享非单例状态(Angular Architecture)
Sharing non-singleton state between controllers ( Angular Architecture )
在我目前的公司,我们正在开发一个非常大的角度应用程序。争论的焦点之一是找出在控制器之间共享非单例状态的最佳方式。在理想的情况下,控制器共享一个恰好是单例的状态,我们可以将该状态建模为service
,并通过inject
使用该service
在这些controllers
之间进行通信
但是,我们希望拥有这个层次结构的多个实例,这意味着拥有一个singleton并没有帮助。我们需要的是一个基于上下文的singleton,它也可以是可注入的。
我们目前正计划通过指令层次结构来实现这一点,在该层次结构中,最高指令的控制器管理状态,然后所有较低指令require
该控制器(用于指令到指令通信的指令控制器!)并调用其上的函数。这样做的问题是,所需的控制器只能在指令的链接函数中访问(这还不错,但由于大多数情况都会在这种状态下发生,所以测试起来会变得更困难。!链接函数比控制器更难测试。你可以直接注入控制器并测试它们。)。
我相信还有其他人可能会面临类似的情况,并想出一个令人满意的解决方案!
考虑这样的层次结构(例如)以更好地理解:
<post>
<header></header>
<button-array></button-array>
<editor></editor>
<footer></footer>
</post>
<post>
<header></header>
<button-array></button-array>
<editor></editor>
<footer></footer>
</post>
n根立柱,每米深。。
这里的例子是一个琐碎的例子,只深入DOM 1级。考虑一下,在应用程序中,我们有4-5级的深层指令。我们沿着隔离作用域的路线前进,并将所需的值传递到子指令中。这起到了作用,但感觉不对,主要是因为如果一个级别为5的指令需要一些东西——介于两者之间的所有指令都必须整理该数据(并公开一个范围变量,该变量除了将该值传递到下一级别之外什么都没做!这似乎很脆弱)。
如果你对如何解决这个问题有很好的建筑眼光,请告诉我们。如果你对什么有效或什么无效有任何建议,那也太好了。如果你知道解决这个问题的不同方法的相对优缺点,那也太好了。
如果我没有错的话,示例中的<post>
元素有一些与它们相关联的状态对象,它们需要将其传递给<header>
等等。
我通过在html级别将对象附加到scope来实现这一点。所以<post item="items[0]">
,然后帖子模板中有<header item="item">
等等。在隔离scope=type的情况下,更改在DOM树上下传播,因为它只是一个javascript对象,其中包含数据
您也可以使用指令控制器层次结构,但这意味着像<button-array>
这样的东西在模板中出现的位置有点硬连接(如果您根据子指令在整个重复对象的DOM层次结构中的出现位置向下推或向上拉,则会断开它),而直接将状态传递到每个项中可以正常工作。
我只使用我称之为"模型状态"的东西来实现这一点,这些东西最终可能会发布到某个服务器上。帖子标题和内容、标记等。视图状态(对象的展开-折叠)在组件内部处理,并用于检测组件的边界(如果两个组件绑定紧密,需要访问彼此的视图状态,那么它们实际上是一个组件)。
- Angular JS IE9 Hashbang url rewriting
- 如何使用skip参数使用angular ui引导进行服务器端分页
- 在自定义mean.io包中使用angular-chart.js作为依赖项
- 无法在数据endVal中设置值=“”;{{ucount}}”;使用Angular JS的CountUp
- 使用angular重定向到html页面
- angular.js没有'无法在PhoneGap中处理视图标记
- Javascript(Angular)从一个对象数组到第二个数组查找值
- angular 1.5应用程序中的导航栏
- angular的下拉菜单
- Angular只从数组中获取所需的数据
- 如何将不可变的js导入angular 2(alpha)
- Angular js-返回一个包含类似
- 如何使用 Angular JS 将数据保存在数据库中
- 将JSON对象传递给angular指令
- 从HTTPGET返回一个自定义对象列表,以便在Angular 2应用程序中使用
- Angular:更新一次性绑定的数据
- 同步调用,直到用户通过angular验证为访问者
- 将Angular js与taglib结合使用
- 在Angular Fullstack中设置TinyMCE
- 在控制器之间共享非单例状态(Angular Architecture)