2015-05-05 1 views
3

JSON/XML с REST

{ 
    litm: "T00000245", 
    lotn: "00004" 
} 

<jdeSerials> 
    <litm>T00000245</litm> 
    <lotn>00004</lotn> 
</jdeSerials> 

AngularJS контроллер

//Searching a product with serial number/LOTN 
$scope.searchProduct = function() { 
    var lotn = $scope.jdeSerials.lotn; 
    console.log("searchProduct---->" + lotn);//log-->searchProduct---->00004 


    $scope.JdeSerials = lotnService.get({id: lotn}, function() { 
     console.log($scope.jdeSerials);//log-->[object Object] 
     console.log($scope.jdeSerials.litm);//log-->undefined!!!!! 

    }); 

//var litm = $scope.jdeSerials.litm; 
//$scope.jdeproduct = productService.get({id: litm}); 

}; 

AngularJS службы

angular.module('lotnService', ['ngResource']) 
    .factory('lotnService', ['$resource', 
     function ($resource) { 
      console.log('------lotmService-----'); 
      return $resource(
'http://localhost:8080/RMAServer/webresources/com.pako.entity.jdeserials/:id', 
        {}, 
        { 

         update: { method: 'PUT', params: {id: '@lotn'} } 
        }); 
     }]); 

Вопрос

Как я могу получить значение $ scope.jdeSerials.litm? Есть ли лучшая идея для решения этой проблемы, например создание службы, которая обрабатывает эти два GET? Я думаю, что причина в том, что метод GET является асинхронным, но каково наилучшее решение для таких ситуаций?

EDIT/обновление

Я изменил вызов службы, как это:

$scope.JdeSerials = lotnService.get({id:lotn}) 
.$promise.then(function(jdeSerials) { 
    $scope.jdeSerials = jdeSerials; 
    console.log("1--------------->LITM:"+$scope.jdeSerials.litm); 
}); 

Я получил LITM, но я получил ErrorMessage, а также:

TypeError: Cannot read property 'then' of undefined 

ответ

1

Попробуйте создайте метод get в своем ресурсе.

angular.module('lotnService', ['ngResource']) 
    .factory('lotnService', ['$resource', function ($resource) { 
    return $resource( 'http://localhost:8080/RMAServer/webresources/com.pako.entity.jdeserials/:id', 
       {}, 
       { 
        get: { method: 'GET', params: {id: '@lotn'}}, 
        update: { method: 'PUT', params: {id: '@lotn'} } 
       }); 
    }]); 

Затем в контроллере, вызов метода получить от службы:

lotnService.get({id:lotn}).$promise.then(
function(jdeSerials) { 
    $scope.jdeSerials = jdeSerials; 
    console.log("1--------------->LITM:"+$scope.jdeSerials.litm); 
}); 
+0

Я думаю, что это не поможет, потому что $ resource предлагает get, query, post и т. Д.автоматически, но я попробую. https://docs.angularjs.org/api/ngResource/service/$resource – Sami

+0

Да, вы правы. Единственное, что я не понимаю, - это то, почему ваше имя приложения совпадает с вашим сервисом. –

+0

Это просто имя модуля. Имя приложения - testClientApp. Я получил семь сервисных модулей, представленных в app.js. Спасибо за комментарий, любую идею, как заставить это работать? Все еще борется с той же проблемой, и это сводит меня с ума. – Sami

0

Что угловой JS версии вы используете?

Выполняет ли следующая работа?

lotnService.get({id:lotn}).then(
    function(jdeSerials) { ... } 
); 

(без в $ пообещать)

Я просматривал документы, а также угловой resource.js источник для предыдущих версий, и кажется, что synthax изменилось где-то вдоль линии.

На angular-resource.js 1.2.0 source:

экземпляров ресурсов и сбор имеет следующие дополнительные свойства:
$promise: за {. @link нг $ д} обещание исходного сервера взаимодействие , который создал этот * экземпляр или коллекция.

На 1.0.8 нет упоминания о $ обещают Собственость, однако.

 Смежные вопросы

  • Нет связанных вопросов^_^