Freewind @ Thoughtworks scala java javascript dart 工具 编程实践 月结 math python english [comments admin] [feed]

(2013-01-01) 16. 理解Anguar中的控制器组件

广告: 云梯:翻墙vpn (省10元) 土行孙:科研用户翻墙http proxy (有优惠)

在Anguar中,一个controller是一个JavaScript函数(类),用来创建angular的scope实例(除了根scope外)。当你或angular通过scope.$new API来创建一个子scope对象时,可以选择是否将一个controller作为参数传入。这表示让Angular把该controller与新创建的scope关联起来,以增加它的行为。

使用controller可以:

设置scope对象的初始状态

通常当你创建了一个应用程序时,你需要给angular的scope设置初始状态。

Angular将一个controller的构造函数应用(apply,跟Javascript的Fuction#apply意思相同)到一个新创建的angular的scope对象上,用于给它设置初始状态。这表示angular从来不会创建controller的实例(比如new MyController)。构造函数永远只被应用到已经存在的scope对象上。

你可以通过创建model属性来初始化一个scope。例如:

function GreetingCtrl($scope) {
 $scope.greeting = 'Hola!';
}

`GreetingCtrl`这个controller创建了一个`greeting`的model,它可以在模板中被引用。

### 为scope对象添加行为

Angular中的行为表现为scope上的方法属性,它们可在模板中被调用。行为与model交互,并可修改model。

如`model`章节所说,所有赋给scope的对象都被当作model属性。所有赋给scope的函数也都在模板中可用,并且可使用angular表达式,或者`ng`事件处理器(如`ngClick`)调用。

### 正确使用Controller

通常来说,一个controller中不要做太多事情。它通常只应该包含一个view所需要的业务逻辑。

让controller瘦身的常用方法是把不属于controller的代码提出来,做成services,然后在controller中通过依赖注入的方式调用它们。这在**依赖注入**一章探讨过。

不要用controller来做:
comments powered by Disqus