Page 316 - AngularJS权威教程
P. 316
296 第 21 章 架构
$scope.sendRegister = function() {}
});
我们可以在视图里调用这个指令,就像调用其他指令那样:
<div login-form
on-login="sendLogin(user)"
on-register="sendRegister(user)"></div>
我们的视图变量安全地藏到指令里去了,不再需要在控制器里持有视图条件了。让控制器精
简是最佳实践,使用指令能让我们有效地做到这一点。
此外,像上面那样把登录的路由隔离到指令中,也使得测试它们的功能更容易。
在控制器之间共享数据
在Angular里,我们可以通过几种不同的方式在控制器之间传递数据。我们可以把控制器嵌
套在同一个父控制器中,允许每个控制器独立修改父控制器$scope上的属性值,或者可以在服务
中共享数据。
尽量把数据存在服务内部,但是更好的方式要视情况而定。比如说,在一个对话框里,把正
在显示的数据放在父控制器里更有道理。
21.4 指令
知道什么时候写指令跟知道什么时候不写同样重要。更多的情况下,写指令是个好主意。
就像在上面看到的那样,它们减少了控制器之中的混乱。
测试指令也比测试控制器容易得多。
指令并不一定要有视图模板。通常情况下,它们可以只作为视图之下处理数据的垫片。
ngModelController控制器就是这种功能派上用场的一个例子。
21.5 测试
我们总是鼓励测试我们的程序。我们不断为各种复杂度的功能编写单元测试。这些测试让我
们对代码有信心,不管这信心有多小。专注于测试也让我们的时间更有效,并且更关注于功能。
只要确信已经对Angular应用API作过单元测试了,就可以编写端到端测试。端到端测试可以
是脆弱的,依赖于视图,所以我们把它们留到开发过程的最后阶段。不仅如此,端到端测试一般
比单元测试慢得多,所以,在开发过程中,先写单元测试能让我们更专注于功能的实现。
我们鼓励对应用的所有部分编写测试。关于测试的更多信息,请参阅第19章。