将 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)。
我是 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)。