将 ID 从 angular 工厂传递给网络服务

Pass ID to webservice from angular factory

我是 angular 的新手,正在解决一些问题。虽然我知道这是一个小问题,但我正在努力解决如何将我的参数从我的工厂传递到我的 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 资源:

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

    }]);

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

    .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;
            }]
        }

您的代码看起来不错,只有当它会中断的情况下,如果您在 $stateParams 中没有 productId 的值,请尝试通过执行 console.log($stateParams.productId) 检查该值.

您在从 $resource 对象返回承诺时也有错字。它应该 .$promise 而不是 .promise

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

编辑

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

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

然后将您的参数名称更改为 id,因为它是我们传递给网络服务的名称。它应该作为查询参数传递,然后 WebMethod.

只会读取该参数
return productResource.getById.get({ id: productId }).$promise

将像 WebService.asmx/GetById?id=1 一样形成 URL(假定 productId 为 1)。