2017-01-04 4 views
0

Я хочу получить средний рейтинг от Обзоров и отобразить его, но я не уверен, как это сделать.Как получить вложенные данные от JSON AngularJS

JSON

"Reviews":[ 
    { 
     "OwnerID":1, 
     "Comment": "Charlotte is brilliant. A lovely person. Thank you!", 
     "rating":4 
    }, 
    { 
     "OwnerID":2, 
     "Comment": "The best dog carer ever! She is amazing", 
     "rating":4 
    } 
    ], 

HTML файл

<ion-item ng-repeat="item in PetCareProfile> 
    <span ng-repeat="rate in item.Reviews" class="item-text-wrap"> {{calculateAverage(rate.rating)}} </span> 
</ion-item> 

Контроллер

.controller('CareTakerProfileCtrl', 
function($scope,$http,$stateParams,$ionicPopup, ionicDatePicker) 
{ 
    $http.get('js/SampleJson.json').success(function (data) { 
    $scope.PetCareProfile = data.PetCareTakers; 
    $scope.whichPetCareProfile = $stateParams.aId; 

    $scope.calculateAverage = function(MyData){ 
    var sum = 0; 
    for(var i = 0; i < MyData.length; i++){ 
     sum += parseInt(MyData[i], 10); //don't forget to add the base 
    } 

    var avg = sum/MyData.length; 

    return avg; 
}; 
}) 

Результат: NaN NaN NaN

Что я хотел: 4.3333333

ответ

1

Вы можете передать массив функционировать и вычислить среднее значение с помощью angular.forEach()

<li ng-repeat="item in PetCareProfile"> 
     {{calculateAverage(item)}} 
</li> 

DEMO

var app = angular.module("app", []); 
 

 
app.controller("ListCtrl", ["$scope", 
 
    function($scope) { 
 

 
    $scope.PetCareProfile = [{ 
 
     "Reviews": [{ 
 
     "OwnerID": 1, 
 
     "Comment": "Charlotte is brilliant. A lovely person. Thank you!", 
 
     "rating": 4 
 
     }, { 
 
     "OwnerID": 2, 
 
     "Comment": "The best dog carer ever! She is amazing", 
 
     "rating": 4 
 
     }] 
 
    }]; // 
 
    
 
    $scope.loopcount = 0; 
 
    $scope.calculateAverage = function(MyData) { 
 
     $scope.sum = 0; 
 
     var filterData = MyData.Reviews; 
 
     angular.forEach(filterData, function(val) { 
 
     $scope.sum += val.rating; 
 
     }); 
 
     var avg = $scope.sum/filterData.length; 
 
     return avg; 
 
    }; 
 
    } 
 
]);
<!DOCTYPE html> 
 
<html> 
 

 
<head> 
 
    <link data-require="[email protected]" data-semver="3.3.5" rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css" /> 
 
    <link data-require="[email protected]" data-semver="3.3.5" rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootswatch/3.3.5/cosmo/bootstrap.min.css" /> 
 
    <link data-require="[email protected]" data-semver="3.3.5" rel="stylesheet" href="//maxcdn.bootstrapcdn.com/font-awesome/4.4.0/css/font-awesome.min.css" /> 
 

 
    <script data-require="[email protected]" data-semver="1.11.3" src="http://code.jquery.com/jquery-1.11.3.min.js"></script> 
 
    <script data-require="[email protected]" data-semver="3.3.5" src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script> 
 
    <script data-require="[email protected]" data-semver="1.4.7" src="https://code.angularjs.org/1.4.7/angular.js"></script> 
 

 
    <link rel="stylesheet" href="style.css" /> 
 
    <script src="script.js"></script> 
 
</head> 
 

 
<body ng-app='app'> 
 
    <div ng-controller="ListCtrl"> 
 
    <ul> 
 
     <li ng-repeat="item in PetCareProfile"> 
 
     {{calculateAverage(item)}} 
 
     </li> 
 
    </ul> 
 
    </div> 
 

 

 
</body> 
 

 
</html>

+0

Привет спасибо за ответ. Однако item.rating не работает. –

+0

Могу ли я увидеть ваш контроллер? – Sajeetharan

+0

Привет, я только что обновил свой вопрос и добавил мой контроллер –

0

Пытались ли вы с :

<ion-list> 
    <ion-item ng-repeat="item in PetCareProfile> 
    {{item.rating}} 
</ion-item> 
</ion-list> 

, но если вы хотите (только в ИОННО), вы также можете использовать (вместо нг-повтор)

<ion-content> 
    <ion-item collection-repeat="item in PetCareProfile"> 
    {{item.rating}} 
    </ion-item> 
</ion-content> 
+0

Привет, спасибо за ваш ответ. Однако item.rating не работает. –

+0

Извините, пожалуйста, попробуйте с тем. Reviews.rating –

+0

Я пробовал с item.Reviews.rating однако значение только выходит, когда я ставлю i t как item.Reviews [1] .rating. Мне не нужен индивидуальный номер, а массив рейтинга. –

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