2016-01-20 2 views
0

Я пытаюсь прочитать данные из служб, пользующихся услугами restful. когда у меня есть один объект json, я получаю проблему. Вот мой код:как читать json данные одного объекта из службы отдыха

код услуги:

var ROAList =[]; 
var promise = $http.post(urlBase + '/' + 'getROAList', params) 
        .success(function (data) { 
         ROAList = data.item; 
         return ROAList; 
        }) 
        .error(function (data) {       
         ROAList = 'error'; 
         return ROAList; 
        }); 
      return promise; 

В контроллере:

var list =[]; 
$scope.ROAListItem = function(){ 
    list =service.getROAList(); 
} 

В HTML:

<div ng-repeat="roa in list()" ng-click ="selectROAitem(roa.soa.name)"> 
    <div> {{roa.id}} </div> 
<div> {{roa.soa.name}}</div> 

вот мой JSON данные:

{"item": [ 
     { 
     "id":"001", 
     "type":"001x2z" 
     "sao":  { 
     "itemNo": "3", 
     "name": "001" 
     }, 
    }, 
     { 
     "id":"002", 
     "type":"002x2g" 
     "sao":  { 
     "itemNo": "5", 
     "name": "006" 
     } 
]} 

он работает отлично для более чем одного элемента, но я получаю сообщение об ошибке для одного элемента. для этого JSon данных:

{"item":{ 
     "id":"001", 
     "type":"001x2z" 
     "sao":  { 
     "itemNo": "3", 
     "name": "001" 
     } 
} 

для этих данных, я получаю «не может прочитать свойство„имя“неопределенные.

+0

Он должен быть массивом для работы ng-repeat. –

+0

'ng-repeat =" roa в списке "' может быть? почему вы вызываете list(); ? Если вы используете функцию, это плохая практика, угловые сделают так много вызовов. И ng-repeat работает и для объектов. –

+0

жаль, что я ошибся. в ng-repeat Я использую ROAListItem. – hanu

ответ

0

Удалённый длинный ответ. Я не видел ваш последний раздел. Ваши множественные возвращения все хранятся в массиве, а ваш единственный возврат - нет. Таким образом, для одного объекта точка доступа неверна.

В ответ на комментарий: опять же, вы должны действительно форматировать возвращенные данные так, что всегда в массиве, но в противном случае вы могли бы сделать что-то вроде:

$scope.ROAListItem = function(){ 
    list = service.getROAList(); 
    if(!Array.isArray(list)){ 
     list = [list]; 
    } 
} 
+0

Как получить доступ к значениям одного объекта? – hanu

+0

Вы должны возвращать свой единственный результат в массиве. В противном случае вам нужно будет выполнить тестирование в javascript. Как и проверка увядания, это массив, а затем, если не вставлять его в один, я думаю. Я отвечу что-нибудь в ответ. –

0

Быстрое решение было бы изменить ваш вызов службы например:

$http.post(urlBase + '/' + 'getROAList', params) 
    .success(function (data) { 
     ROAList = data.item; 
     if (!angular.isArray(ROAList)) { 
      ROAList = [ ROAList ]; 
     } 
     return ROAList; 
    }) 

Однако ваша служба действительно должна обеспечивать согласованное поведение, возвращая массив, даже если имеется только один элемент.

+0

это сработало для меня. Большое вам спасибо за решение. – hanu

+0

Отлично! Если это было полезно, пожалуйста, примите и/или подтвердите ответ, спасибо. :-) –

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