我是一个有角度的新人,并解决了一些问题。虽然我知道这是一个小问题,我正在努力解决如何从我的工厂将参数传递给我的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' })
};
}]);
答案 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;
}]
}