从角度工厂将ID传递给webservice

时间:2015-12-18 19:31:12

标签: asp.net angularjs ajax webmethod angularjs-resource

我是一个有角度的新人,并解决了一些问题。虽然我知道这是一个小问题,我正在努力解决如何从我的工厂将参数传递给我的Web服务的语法。我的错误来自Web服务,缺少参数ID。

这是我的配置状态:

            .state("productDetail", {
            url:"/products/:productId",
            templateUrl: "app/products/productDetailView.html",
            controller: "ProductDetailCtrl as vm",
            resolve: {
                productResource: "productResource",
                product: function (productResource, $stateParams) {
                    var productId = $stateParams.productId;
                    return productResource.getById.get({ productId: productId }).promise;
                }
            }

这是我的角色资源:

    angular
    .module("commonservices")
    .factory("productResource",  ["$resource", function($resource){        
        return {
            getAll:$resource("WebService.asmx/GetAll"),
            getById: $resource("WebService.asmx/GetById/:productId", { productId: '@productId' })
        };

    }]);

2 个答案:

答案 0 :(得分:1)

您的代码看起来很好,只有在它会破坏的情况下,如果您在productId中没有$stateParams的价值,请尝试通过console.log($stateParams.productId)检查该值

此外,您在从$resource对象返回承诺时输入了拼写错误。它应该.$promise而不是.promise

return productResource.getById.get({ productId: productId }).$promise

修改

如果你想将变量传递给webmethod,它应该作为查询参数传递,而不是通过假设直接传递给URL。为了改变你的资源,如下面

getById: $resource("WebService.asmx/GetById", { });

然后将参数名称更改为id,因为它是我们传递给webservice的名称。它应作为查询参数传递,然后只有WebMethod读取该参数。

return productResource.getById.get({ id: productId }).$promise

将形成类似WebService.asmx/GetById?id=1的网址(1假定为productId)。

答案 1 :(得分:0)

如果您需要在解析回调中使用注入服务,请使用以下语法:

    .state("productDetail", {
        url:"/products/:productId",
        templateUrl: "app/products/productDetailView.html",
        controller: "ProductDetailCtrl as vm",
        resolve: {
            productResource: "productResource",
            product: ['productResource','$stateParams',function (productResource, $stateParams) {
                var productId = $stateParams.productId;
                return productResource.getById.get({ productId: productId }).promise;
            }]
        }