2015-12-18 2 views
1

Я новичок с угловыми и работаю через некоторые проблемы. Хотя я знаю, что это небольшая проблема, я борюсь с синтаксисом о том, как передать мой параметр на мой веб-сервис с моей фабрики. Моя ошибка из веб-службы - это идентификатор параметра отсутствует.Pass ID для webservice от угловой фабрики

Вот мой конфиг состояние:

  .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' }) 
     }; 

    }]); 

ответ

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 

будет формировать URL как WebService.asmx/GetById?id=1 (1 предполагается PRODUCTID).

+0

productId имеет значение при входе в консоль. Но теперь проблемы - это имя метода веб-службы недействительно. –

+0

@TroyBryant - вы используете ASP.net 'webservice'? –

+0

Да, его .net webservice, принимающий 1 id –

0

Если вам нужно вводить услуги в вашем Resolve обратного вызова, используйте следующий синтаксис:

.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; 
      }] 
     } 
Смежные вопросы