我对AngularJS
很陌生,我试图找到一个很好的方法来为一个简单的REST
客户端实现Controller-Service通信我是目前正在写作。
在网络上,我找到了很多示例,其中controller
委托$http
请求service
,但仍然依赖$http
对象来执行成功/错误处理。这是恕我直言,并没有彻底解耦,因为$http
对象是"泄露"到controller
图层。 controller
应该不知道如何检索数据 - 它应该只询问服务层"给我/做这个/等等。"
我有一个java
背景,您通常会使用POJO来解耦控制器服务,但有时这也可能是一种反模式。
什么是最佳做法?
答案 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。在那里,您将创建资源实例并要求他们为您获取数据,这可能正是您想要的。