从AngularJS中的$ resource.get()读取数据

时间:2015-05-05 08:52:31

标签: javascript angularjs rest angular-resource

来自REST的JSON / XML

{
  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方法是异步的,但处理这种情况的最佳解决方案是什么?

修改/更新

我改变了这样的服务电话:

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

我得到了LITM,但我也得到了错误消息:

TypeError: Cannot read property 'then' of undefined

1 个答案:

答案 0 :(得分: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);
});