AngularJS指令vs服务vs控制器


15

我将开始在公司内部网站上执行更改请求,该请求将检查一堆字段并突出显示它们是否符合某些准则。例如,如果出生日期是今天,则该字段将被概述,并且工具提示将显示“祝他们生日快乐!”。

规范要求在页面其余部分完成渲染后再加载,因此不会增加加载时间。由于我是angularJS的新手,所以我不确定应该采用哪种“正确”方法。

问题:

由于这包括添加边框和图像以及标题属性(DOM操作),因此似乎应该使用指令。

但是,这不会像大多数指令那样可重复使用或“简短”。

我需要检查的数据的一半将在页面加载时的原始调用中返回,因此我想保存它,而不会浪费另一个调用来再次获取它,这使我认为服务对于存储所有这些数据将是不错的选择。

我确实知道如何在控制器中执行所有操作,但这是不好的错误代码:P

关于最好的方法有什么想法吗?基本上,我将需要一个http调用来检查所有数据,这将为我需要执行的每种“ Call Out”类型返回一个带有布尔值的对象。然后,我将遍历此列表,如果该值为true,则添加边框,图像和工具提示文本。

我不确定这个问题是否足够清楚,所以如果您要我添加一些详细信息,请询问。谢谢!


1
为什么只用3个中的1个呢?在我看来,至少要结合使用指令和服务/控制器才是最好的选择。
皮特

组合也很好,我只是对应该如何工作感到困惑。
Bobo 2014年

对不起,这是在评论中,没有时间给出正确答案。您拨打数据的电话可能会加入服务。该服务应注入到您的控制器中。如果您需要为该数据视图提供任何逻辑,它将在控制器中。最后,您的视图应使用可以使用您可能已在控制器中公开的任何逻辑的指令。
皮特

Answers:


27

没错,有很多选择。

控制器是开始编写角度新内容的好地方。将控制器绑定到一块标记上,就可以将angular的现有指令库与angular的现有服务一起使用。

经过很短的一段时间后,您会发现您的控制器变得太大了。好了,现在该重构了。这是我倾向于遵循的一般准则。

  • 控制器:控制器附加并管理与$ scope相关的值/功能。最终,$ scope趋于很大程度上受表示驱动。IE浏览器是一个视图模型。
  • 服务:服务倾向于与基础架构,后端或其他浏览器功能相关联
  • 指令:指令使您可以与现有处理程序无法处理的DOM事件/功能集成。

因此,您需要向以下三个方向之一推送代码:

  1. 从逻辑上讲,我的控制器中的代码实际上是表示数据/逻辑的另一部分,应拆分为另一个控制器。请注意,在$ scope上使用项目时,最好将每个控制器负责的部分隔离到$ scope上自己的对象中。例如,一个控制器的$ scope.creditCard。[blah]与另一控制器的$ scope.billingAddress。[blah]。这有助于防止angular在$ scope上使用原型继承问题。

  2. 来自我的控制器的代码是一段应用程序基础结构或实用程序代码,可能需要通过该应用程序共享,并且应该拆分为服务

  3. 我的控制器中的代码与表示/ DOM组织密切相关,因此应拆分为自己的指令

1.的示例可能是与其他付款表格分开处理输入/验证信用卡。您将在一个控制器中有许多信用卡逻辑,这些逻辑与用于让用户输入地址的逻辑是分开的,因此从逻辑上讲,他们将是分开的控制器。

2的示例可能是移动与信用卡后端服务通信的部分以接受/拒绝付款。另一个例子可能是与后端对话以处理用户创建API的模块。

3的示例可能是创建某种自动标签功能,在为信用卡输入4个数字后,将光标在4个编辑框之间移动。

相应地拆分您的应用程序。


这确实帮助我更多地了解了角度。非常感谢您:)
Bobo
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.