我正在使用angular创建一个网站/应用程序,调用服务的控制器和用于休息数据获取的$资源满足了我的大部分要求,并通过ui.router状态使用模板文件显示它们。
我是否真的需要使用自定义角度指令对显示进行编码。通过不使用自定义指令,我错过了利用角度的力量?
我看了一下,指令的发展有着陡峭的学习曲线,而且不清楚,花费的时间是值得的。
答案 0 :(得分:3)
这是一个很好的问题,它与你应该如何构建应用程序有很大关系,以便最大化Angular及其提供的MVC的效用。
简短:
控制器通常用于保存要在视图中显示的信息,而控制器内的逻辑应保持最小。 每当你操纵DOM使用指令时 - 是的,它们确实值得学习。 每当您更新可以并将在您网站的多个方面共享的数据时,请使用服务。
稍长的版本:
<强>控制器强>
最终,控制器应该具有非常少的逻辑。您希望将其视为模型和视图之间的桥梁,它只包含要在视图中显示的信息。考虑到这一点,控制器应该只负责将逻辑结合在一起。撰写角度风格指南的Todd Motto在这里有一篇很棒的博客文章:http://toddmotto.com/rethinking-angular-js-controllers/
<强>指令:强>
指令非常强大,因为它们允许您使用封装逻辑创建自定义元素。例如,假设您想要创建一个文本自动完成功能,该功能将用于网站的许多不同部分。您无需多次重新创建自动完成周围的html和逻辑/功能,您可以创建一次“自动完成”指令,只需一行html,您就可以在整个应用程序中重复使用它。反过来,指令有助于促进“不要重复自己”(DRY)政策。
<强>服务强>
服务本质上是您在应用程序中的模型。每当您在应用程序中共享数据或数据相关方法时,您应该使用服务。 Angular提供服务(实际上是提供者的核心,但我们不会深入研究),以便您可以通过简单地注入它来共享应用程序中的各种方法和数据集。就像Directives一样,它们可以帮助您推广DRY,因为服务是单例,这意味着依赖于服务的每个组件都只引用Angular服务工厂生成的一个实例。你可能在服务中提出的事情是:http / api请求(每当你使用http服务,如$ resource,你应该使用服务),实用程序方法(即你可能在多个地方使用的文本格式化功能)整个网站),或您将在多个视图中显示/使用的任何数据。