Javascript 读取数据服务中的参数值
我有控制器Javascript 读取数据服务中的参数值,javascript,angularjs,Javascript,Angularjs,我有控制器 homemodule.controller("productController", function ($scope, $http, $resource, dataServiceSingleProduct, $routeParams) { $scope.data = dataServiceSingleProduct; dataServiceSingleProduct.getProduct() .then(function () { //su
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服务中发送读取id参数
它在控制器上使用$routeParams提供。在控制器中:
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();
});
};
注意如何从然后成功函数返回修改后的承诺。此外,为了拒绝承诺,您只需使用$q.reject
拒绝当前承诺