У меня есть эта проблема... Я использую ng-repeat с внутренним, чтобы получить данные внутри дочернего элемента, это работает отлично, но я не могу найти метод для получения длины ng-repeat. Мне нужно получить количество комментариев.
Как получить длину ng-repeat с помощью inner?:
js:
angular.module('myApp.Profile', ['ngRoute', 'firebase'])
.config(['$routeProvider', function($routeProvider) {
$routeProvider.when('/Profile', {
templateUrl: 'Profile/Profile.html',
controller: 'ProfileCtrl'
});
}])
.controller('ProfileCtrl', ['$scope', '$firebase', '$firebaseArray', '$firebaseObject', function ($scope, $firebase, $firebaseArray, $firebaseObject) {
var firebaseRefs = firebase.database().ref('PostUsers/');
$scope.PostList = $firebaseArray(firebaseRefs);
}]);
html:
<body ng-controller="ProfileCtrl">
<div ng-repeat="PostList in PostList">
<p>Author: {{PostList.userAuthor}}</p>
<p>Comments: {{PostList.post}}</p>
<div ng-repeat="innerPostList in PostList.PostedComments">
<p>Author: {{innerPostList.username}}</p>
<p>Comments:{{innerPostList.comments}}</p>
</div>
</div>
<h4>Publications number: {{PostList.length}}</h4>
<h4>Comments number: {{????.length}}</h4>
</body>
Я использую Firebase:
ПРИМЕЧАНИЕ: {{PostList.PostedComments.length}} не работает...
эта ошибка появляется, когда я пытаюсь это сделать в контроллере: angular.js: 13920 TypeError: Невозможно прочитать свойство "длина" неопределенного. Это то, что я сделал:
var value = PostList.PostedComments.length;
console.log("значение комментариев:" + значение ");
но когда я пробую это, он отлично работает:
var value = PostList.length;
console.log("значение комментариев:" + значение ");
Если вы можете ng-repeat на PostList.PostedComments
, нет причин, по которым вы не можете просто взять длину из нее напрямую.
<div ng-repeat="innerPostList in PostList.PostedComments">
<p>{{innerPostList.comments}}</p>
</div>
<!-- length -->
<h4>{{PostList.PostedComments.length}}</h4>
EDIT: Я просто сделал некоторые исследования по firebase, и кажется, что ваш $ firebaseArray() возвращает обеимподобную оболочку для фактических данных/результатов, поэтому вероятно, почему у нее нет прямых свойств, которые вы хотите. Также возможно, что сетевой запрос/обещание еще не разрешен, когда вы его проверяете.
Вместо var firebaseRefs = firebase.database().ref('PostUsers/'); $scope.PostList = $firebaseArray(firebaseRefs);
var firebaseRefs = firebase.database().ref('PostUsers/'); $scope.PostList = $firebaseArray(firebaseRefs);
Попробуйте что-то вроде этого:
firebase.database().ref('PostUsers/').$loaded().then(function(data) {
$scope.PostList = data;
});
Осмотрите объект данных и убедитесь, что он имеет то, что вы хотите.
Полезные ссылки:
<h4>{{PostList.PostedComments.length}}</h4>
?