我有一个处理身份验证的控制器。我已经声明了一个名为Authentication的工厂服务,该服务有一个login()方法,该方法向返回令牌的REST API发出$ http请求。
login()方法有callback参数。控制器处理回调。验证成功后,我想调整DOM以隐藏登录表单。 (我使用jQuery Mobile进行UI路由。)我不希望控制器弄乱DOM,因此我已经宣布了一个名为View的工厂服务,我将其传入控制器。然后login()回调调用View.hideLoginForm()。
这是保持关注点分离的最佳方式 - 将服务传递给负责调整视图的控制器吗?它使单元测试变得容易,所以至少有这样的。只是想知道是否有人有更好的想法。
答案 0 :(得分:0)
从我的角度来看,控制器连接范围和逻辑。范围本身将视图与JS连接起来。服务实际上是应用程序逻辑(所以你的Authentication
- 服务所做的那样),它不应该直接改变视图。
因此,为了清楚地分离关注点,我宁愿更改控制器showLoginForm
中的变量$scope
,并通过ng-show
- 指令将该变量绑定到DOM。然后,您只需将showLoginForm
设置为false,您的视图就会自动更新。
这也是100%可测试的,因为您不需要担心任何DOM操作。