我有控制器
homemodule.controller("productController", function ($scope, $http, $resource, dataServiceSingleProduct, $routeParams) {
$scope.data = dataServiceSingleProduct;
dataServiceSingleProduct.getProduct()
.then(function () {
//success
},
function () {
// error
alert("could not load product");
});
});
和数据服务
homemodule.factory("dataServiceSingleProduct", function ($http, $q) {
return {
product: _product,
getProduct: _getProduct
};
// implementation
var _product = [];
var _getProduct = function () {
var deferred = $q.defer();
$http.get("/Data/GetProduct", { params: { "id": 2 } })
.then(function (result) {
// success
angular.copy(result.data, _product);
deferred.resolve();
},
function () {
// error
deferred.reject();
});
return deferred.promise;
};
});
这适用于此硬编码参数id(params: { "id": 2 }
)
我的问题是:
如何在dataServiceSingleProduct服务中发送read id参数。
它可以在控制器上使用$ routeParams。
答案 0 :(得分:2)
在控制器中:
var id = $routeParams.id;
dataServiceSingleProduct.getProduct(id).then(function(data) {
// ...
});
在服务中:
var _getProduct = function(id) {
var deferred = $q.defer();
$http.get("/Data/GetProduct", { params: {id: id} }).then(function(result) {
angular.copy(result.data, _product);
deferred.resolve();
}, function () {
// error
deferred.reject();
});
return deferred.promise;
};
甚至更好地提供$http.get
已经返回一个承诺,所以不需要创建另一个承诺:
var _getProduct = function(id) {
return $http.get("/Data/GetProduct", { params: {id: id} }).then(function(result) {
return angular.copy(result.data, _product);
}, function() {
$q.reject();
});
};
请注意如何从then
成功函数返回修改后的承诺。另外,为了拒绝承诺,您只需使用$q.reject
拒绝当前承诺。