从Controller事件调整View的正确方法

时间:2014-03-21 22:48:01

标签: angularjs

我有一个处理身份验证的控制器。我已经声明了一个名为Authentication的工厂服务,该服务有一个login()方法,该方法向返回令牌的REST API发出$ http请求。

login()方法有callback参数。控制器处理回调。验证成功后,我想调整DOM以隐藏登录表单。 (我使用jQuery Mobile进行UI路由。)我不希望控制器弄乱DOM,因此我已经宣布了一个名为View的工厂服务,我将其传入控制器。然后login()回调调用View.hideLoginForm()。

这是保持关注点分离的最佳方式 - 将服务传递给负责调整视图的控制器吗?它使单元测试变得容易,所以至少有这样的。只是想知道是否有人有更好的想法。

1 个答案:

答案 0 :(得分:0)

从我的角度来看,控制器连接范围和逻辑。范围本身将视图与JS连接起来。服务实际上是应用程序逻辑(所以你的Authentication - 服务所做的那样),它不应该直接改变视图。

因此,为了清楚地分离关注点,我宁愿更改控制器showLoginForm中的变量$scope,并通过ng-show - 指令将该变量绑定到DOM。然后,您只需将showLoginForm设置为false,您的视图就会自动更新。

这也是100%可测试的,因为您不需要担心任何DOM操作。