2015-02-06 62 views
4

这里开始角度的开发者。角度控制器的要点是什么?控制器的工作不能由指令完成吗?

让我开始说我非常喜欢角度,我认为它是一个非常好的架构框架。

这就是说,我不明白为什么控制器存在。让我来解释一下:

从我的理解服务有一个明确的角色: 整个应用程序所需要的模型 2)执行业务逻辑 3:1)蓄能件)聊到服务器

的观点: 1)显示模型

指令: 1)创建范围 2)暴露功能他们创造通过它们采取来自用户的输入和 一)改变模型 b)中操纵DO作用域M

控制器的要点是什么?看起来指令被设计来执行控制器所做的所有工作。

控制器是否应该在指令操纵DOM时操纵模型?

回答

2

角度不是一个特别自负的框架,虽然有些人可能会告诉你它是。

控制器是访问/创建范围和将许多其他部件连接在一起的简单方法。他们是灵活和容易的,适合'你只需要在这一点做点什么东西'

指令应该是可重复使用和表达的,就像'给我一个使ajax请求的按钮的东西'你想在5个地方。控制器对于这个任务没有意义。

当你真的需要一个控制器时,使用一个指令非常重量级,可能有点丑,那就是我会看到差异点的地方。如此说来,如果你认为它们更好,那么在任何地方使用指令都不会阻止你。

+0

好的,谢谢你,这种确实有道理。为什么你说这个指令的重量更重呢?我的意思是不是ng-controller只是另一个指令? – pQuestions123 2015-02-06 01:24:41

+1

ng-controller是将控制器与元素相关联的指令。控制器不是指令。我认为这是'重量级',因为你必须编写更多的代码来创建指令并对其进行单元测试。 – 2015-02-06 01:45:24

1

让我们引述AngularJS文档:

this chapter

什么是指令?

在高层次上,指令是指示AngularJS的HTML编译器($ compile)将指定行为附加到该DOM元素的DOM元素(例如属性,元素名称,注释或CSS类)上的标记,或者转换DOM元素及其子元素。

that chapter

使用控制器:

  • 搭建$范围对象的初始状态。

  • 将行为添加到$ scope对象。

不要使用控制器:

  • 操作DOM - 控制器应该只包含业务逻辑。将任何表示逻辑放入控制器中会严重影响其可测试性。对于大多数情况,Angular具有数据绑定,并且指令用于封装手动DOM操作。

  • 格式输入 - 使用角形式控制来代替。

  • 过滤器输出 - 使用角度过滤器代替。跨控制器

  • 分享代码或状态 - 使用的角度,而不是服务。

  • 管理其它组件的生命周期(例如,创建服务实例)。

你得样样有,差不多。

微妙的一点是,因为AngularJS仅在Html页面和js代码之上工作(而不是传统的客户端/服务器设置),服务器通常支持的视图和“后端”全部嵌入相同的文档和指令,作为操纵DOM的工具,也是引导应用程序的核心功能,所以它必须是直接在那里直接硬编码应用程序的诱惑。这就是框架中已经发生的事情:特定的指令专用于控制器。

在MVC架构中,控制器有助于缩小视图和模型,集中围绕功能一组模型及其数据旋转。它还有助于从什么是业务逻辑描述属于纯UI的内容:除非您计划提供新的功能,否则更改UI不应影响该逻辑。但是,由于平台的限制,这里的这些模式又重叠了。

决定性的参数可能如下:如果您没有使用内置控制器模块和指令,则必须派生新的指令以将UI入口点绑定到业务逻辑,并且在此过程中,您将重新创建对象控制器模式来保存这些入口点后面的代码。

AngularJS很容易让您和为您提供了开箱即用。

或者,也许你会拿出一个alternative

相关问题