我在项目中使用anularJS,我需要一个服务才能使用$ http.get方法获取JSON,我认为服务的语法更容易阅读:
app.service('ApiService' , function($http)
{
var self = this;
self.user = {};
self.user.getByName = function(){};
self.user.getByRate = function(){};
self.events = {};
self.events.getList = function(){};
self.events.getByDate = function(){};
return ({
user : self.user,
events : self.events
});
});
然后你可以这样称呼它:
$scope.reople = ApiService.use.getList('some url');
但是我看到过多的网页(例如this和this以及this),使用工厂作为更好的方法似乎更受欢迎。可以请你解释一下:
答案 0 :(得分:2)
.service()
只是.factory()
的衍生版本,两者都来自.provider()
,所有这些都是用于在整个应用中通过DI注册服务。
如果您想详细了解,请参阅AngularJS: Service vs provider vs factory。
为什么.factory()
受欢迎的原因可能是因为:
.service()
太具体了,你只能传递一个构造函数.provider()
过于冗长,并非所有服务都应该可配置 .factory()
是中间的东西,可满足几乎常见用法的需求。
app.factory('ApiService' , function($http) {
function ApiService() {
var self = this;
self.user = {};
self.user.getByName = function(){};
self.user.getByRate = function(){};
self.events = {};
self.events.getList = function(){};
self.events.getByDate = function(){};
};
return new ApiService();
});
答案 1 :(得分:2)
工厂不喜欢服务。根据您需要的响应类型,您需要回调还是返回结果的值?分别是合适的服务或工厂。