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
拒绝当前承诺