读取dataservice中的参数值

时间:2014-10-27 10:33:17

标签: javascript angularjs

我有控制器

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。

1 个答案:

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