我用angular创建了一个服务,就像:
function dbService($http) {
var instance = '';
var service = {
add: add,
instance: instance
};
return service;
function add(object) {
return $http.post('/api/' + this.instance, object);
}
}
我只在每次调用服务时更改实例属性,因为我注意到每个服务都具有相同的配置,但只更改了控制器名称。有些人喜欢:
$scope.send() = function(){
dbService.instance="Cars";
dbService.add($scope.car).then(
function(data){
console.log(data);
},
function(error){
console.log(error);
}
};
什么样的问题可以给我这种方法?我应该为每个控制器创建一个服务(例如" CarsService"等等),还是应该继续使用这种方法?
提前致谢!
答案 0 :(得分:0)
一项服务对所有控制器都足够了。我没有任何问题地使用了以下服务。
(function() {
'use strict';
var HttpServiceApp = angular.module('app');
var Http = function($http) {
var HttpObject = {};
HttpObject.get = function(route) {
return $http.get(route)
.then(function(response) {
return response.data;
});
};
HttpObject.post = function(route, data) {
// console.log(data);
return $http.post(route, data).then(function(responce) {
// console.log("response :: " + JSON.stringify(responce));
return responce.data;
});
};
HttpObject.getParams = function(route, params) {
var requestData = {
method: "GET",
url: route,
params: params
};
return HttpObject.request(requestData);
};
HttpObject.request = function(request_data) {
return $http(request_data).then(function(response) {
return response.data;
});
};
return HttpObject;
};
HttpServiceApp.factory('Http', ['$http', Http]);
})();
<强>控制器强>
$scope.send() = function(){
Http.post("api/Cars",$scope.car).then(
function(data){
console.log(data);
},
function(error){
console.log(error);
}
};
答案 1 :(得分:0)
我建议看Restangular。使用此库,您可以为封装API逻辑的每个资源(端点)定义服务。 使用restangular应用于您的示例:
通过这种方法,您的代码可以更好地与SRP匹配,并且更易读和易懂。
<强> cars.resource.js 强>
angular.module('resources')
.factory('Cars', CarsFactory);
function CarsFactory(Restangular, API_ENDPOINT) {
return Restangular.withConfig(function(RestangularConfigurer) {
RestangularConfigurer.setBaseUrl(API_ENDPOINT);
RestangularConfigurer.extendModel('cars', function(model) {
//Extend the resource with custom funcions
model.getParts = function() {
return model.getList('parts');
};
return model;
});
}).service('cars');
}
})();
<强> controller.js 强>
angular.module('myapp',[resources])
.controller('MyCtrl',['$scope','Cars', MyCtrlFunction]);
function MyCtrlFunction($scope, Cars]) {
$scope.send() = function(){
Cars.save($scope.car).then (...)
}
};
答案 2 :(得分:0)
该服务是单身人士;你没有单独的实例,不需要instance
财产
你不需要在这里存储任何状态,所以只需使用纯函数:
function dbService($http) {
var service = {
add: add,
};
return service;
function add(objectType, object) {
return $http.post('/api/' + objectType, object);
}
}