Я пытаюсь подсчитать элементы в массиве без использования ng-repeat
(мне это действительно не нужно, я просто хочу распечатать сумму).Как получить длину массива без ngRepeat
Это то, что я сделал до сих пор: http://codepen.io/nickimola/pen/zqwOMN?editors=1010
HTML:
<body ng-app="myApp" ng-controller="myCtrl">
<h1>Test</h1>
<div ng-cloak>{{totalErrors()}}</div>
</body>
Javascript:
angular.module('myApp', []).controller('myCtrl', ['$scope', '$timeout', function($scope) {
$scope.tiles= {
'data':[
{'issues':[
{'name':'Test','errors':[
{'id':1,'level':2},
{'id':3,'level':1},
{'id':5,'level':1},
{'id':5,'level':1}
]},
{'name':'Test','errors':[
{'id':1,'level':2,'details':{}},
{'id':5,'level':1}
]}
]}
]}
$scope.totalErrors = function() {
if ($scope.tiles){
var topLevel = $scope.tiles.data
console.log (topLevel);
return topLevel[0].issues.map(function(o) {
return o.errors.length
})
.reduce(function (prev, curr){
return prev + curr
})
}
}
}]);
Этого код работает на codepen, но на моем app Я получаю эту ошибку:
Cannot read property '0' of undefined
и, если я его отлаживаю, topLevel не определено при вызове функций.
Я думаю, что это связанно с загрузкой данных, так как в моем приложении у меня есть сервис, который выглядит следующим образом:
angular.module('services', ['ngResource']).factory('tilesData', [
'$http', '$stateParams', function($http, $stateParams) {
var tilesData;
tilesData = function(myData) {
if (myData) {
return this.setData(myData);
}
};
tilesData.prototype = {
setData: function(myData) {
return angular.extend(this, myData);
},
load: function(id) {
var scope;
scope = this;
return $http.get('default-system.json').success(function(myData) {
return scope.setData(myData.data);
}).error(function(err) {
return console.error(err);
});
}
};
return tilesData;
}
]);
и загружают данные, как это в моем контроллере:
angular.module('myController', ['services', 'ionic']).controller('uiSettings', [
'$scope', '$ionicPopup', '$ionicModal', 'tilesData', function($scope, $ionicPopup, $ionicModal, tilesData) {
$scope.tiles = new tilesData();
$scope.tiles.load();
$scope.totalErrors = function() {
debugger;
var topLevel;
topLevel = $scope.tiles.data;
console.log(topLevel);
return topLevel[0].issues.map(function(o) {
return o.errors.length;
}).reduce(function(prev, curr) {
return prev + curr;
});
};
}
]);
но я не знаю, что делать, чтобы решить эту проблему. Любая помощь будет действительно оценена. Большое спасибо
В службе, функция загрузки: 'вернуть scope.setData (MyData)'. –
Похоже, вы исправили, он ... собирается на кофейные показы 6 на странице. –
Пожалуйста, учтите, что вы отправляете весь код вашего контроллера из своего приложения. –