2016-08-13 45 views
2

我正在一个项目中有近90多个模块。 所有模块都有一组输入字段,并且在提交时应将数据保存在服务器上。 在任何给定的时间点,只有一个模块处于活动状态。但是在后台可以打开模块。

提交按钮对所有模块都是通用的,这意味着整个应用程序只有一个提交按钮。

下面的图片更多地解释它。 sample structure of the page

主要的座右铭是保持个别模块更改为最低限度,并从中央位置处理模块中的某些事情(验证,重新加载等)。

目前的办法,我打算是,

  • 使用“moduleInit”指令,所有模块应在其 部分。
  • 在指令采用了模块的$范围,它只要 模块是开放的传递给 共同服务/工厂(pushConfigService)
  • 的pushConfigService商店,并保持这个范围。一旦范围被销毁, 的引用将从pushConfigService中删除。

  • 页脚面板另有一个指令,在其提交按钮和 调用在pushConfigService保存功能,这反过来又在模块中调用 一个$范围函数来获取表单数据。

  • pushConfigService与一堆其他服务交谈,如
    dirtyChecker,apiGenerator并最终将数据发布到服务器。

每个模块都有一组使用某些标准名称定义的作用域方法。例如:_submit,_onSubmit,_cancel,_reload等。

另一种方法来处理这个,广播提交事件和每个模块听相同。有可能更多的行动将被添加到页脚面板。 所以我有点犹豫使用广播方式。

我的问题,是否将控制器范围传递给服务是一个好主意?任何替代建议?

在此先感谢。

+0

嗨,在这个问题上的任何进展?我的回答是否有帮助,还是需要进一步解释? –

+0

嘿马尔滕,我错过了你的评论..对不起...是的,你的建议真的帮助了这里。为此非常感谢。 – user3446847

+0

很高兴听到它帮助你@ user3446847!你可以将答案标记为已接受(http://stackoverflow.com/help/someone-answers)? –

回答

1

我相信你的核心理念是处理这种设置的好方法。但我建议从UI中分离业务逻辑。我没有你的代码样本,所以建立一个确切的例子有点困难。然而,既然你使用的是$scope变量,我会假设你没有使用类似于或类似于John Papa's的styleguide。他的方法鼓励您不要使用$scope,并保持接近实际的JavaScript“课程”。

这是如何产生影响的?
而不是传递整个范围,你只能通过你的特定模块的实例。对于你而言,你和同事不需要弄清楚给定范围的组成,而只需要一个具体的界面来操作就不那么困惑了。另外它防止服务能够改变$scope

后者可以被认为是一种良好的做法。只要控制器改变范围,就可以轻松找到更改和管理UI的代码。从那里控制器可以访问服务来完成实际的逻辑。

把它一步
所以路过的范围,而不是类的实例应该是轻松的调整到已经提出的设置。但请考虑以下设置。

似乎有很多不同的方式来处理和处理由模块/最终用户提供的数据。这个逻辑现在在控制器中实现。有人可能会认为这些模块中的一些共享类似的处理方法(在那里有大的假设)你可以将这个逻辑转移到可以说是节约战略的服务中。在激活模块时,该模块将在处理提交按钮单击的服务中设置其首选的保存策略。或者更确切地说,应该从控制器中的onClick处理程序中调用save数据方法。

现在,这些服务/策略可以在控制器之间共享,可能会设置更好的工作流程和更少的重复代码。