服务和控制器之间的解耦,例如不使用$ http

时间:2014-06-02 09:58:31

标签: angularjs

我对AngularJS很陌生,我试图找到一个很好的方法来为一个简单的REST客户端实现Controller-Service通信我是目前正在写作。

在网络上,我找到了很多示例,其中controller委托$http请求service,但仍然依赖$http对象来执行成功/错误处理。这是恕我直言,并没有彻底解耦,因为$http对象是"泄露"到controller图层。 controller应该不知道如何检索数据 - 它应该只询问服务层"给我/做这个/等等。"

我有一个java背景,您通常会使用POJO来解耦控制器服务,但有时这也可能是一种反模式。

什么是最佳做法?

2 个答案:

答案 0 :(得分:0)

我只是从我的services返回承诺。这是一个例子:

控制器:

$scope.removeTask = function(task) {
    BoardService.removeTask({task_id: task.id}).then(function() {
           // Task was removed
    });
}

服务:

this.removeTask = function(data) {
    return $http.post($rootScope.serverRoot + '/task/delete', data);            
}

这样做不需要在控制器中注入$http

答案 1 :(得分:0)

在控制器中使用$http服务并对其返回的承诺做出反应是完全没问题的。但是,如果您在其他地方也使用了逻辑,则可以开始将其放入新服务中,然后注入而不是$http服务。

但同样,这只会冒出另一个承诺,你会对使用解决方案或拒绝回调做出反应。

另外,在讨论RESTful接口时,您可能需要查看angulars $resource服务,这是$http之上的一个附加层,它为您提供了一个RESTFul api,用于Web上的RESTFul API。在那里,您将创建资源实例并要求他们为您获取数据,这可能正是您想要的。