Я пытаюсь добавить разбивку на страницы, но я не могу понять эту последнюю часть. Все настроено, хотя моя разбивка на страницы не записывает количество сообщений, связанных с пользователем.post.length остается 0 из-за цикла - AngularJS
Видя, что я делаю Foreach и если цикл и толкая извлекаемые элементы в пустую коллекцию, мой «posts.length» возвращается 0.
Поэтому нумерация страниц только показывает страницу 1/1 и не 1/2 (например).
Вот мой полный код:
profileCtrl.js
Вот http.get $ - Я стараюсь, чтобы получить все сообщения о том, что авторизированные пользователь сделал делает этот цикл:
app.controller('profileCtrl', function($scope, auth, $http, $log) {
$scope.auth = auth;
$scope.date = auth.profile.created_at;
$scope.pageSize = 5;
$scope.posts= [];
$http.get('URL')
.then(function(result) {
angular.forEach(result.data, function(data, key) {
if(data.userId === auth.profile.user_id) {
$scope.posts.push(data);
}
});
});
});
profile.html Как вы можете видеть, что я пытаюсь получить длину поста в сообщениях с помощью total-items="posts.length"
:
<div class="col-md-8 no-padding-right">
<div class="panel panel-primary">
<div class="list-group-item active text-center">
<h4 class="no-margin-top no-margin-bottom">Recent Activity</h4>
</div>
<a href="#" class="list-group-item" ng-repeat="post in posts| startFrom: (currentPage - 1) * pageSize | limitTo: pageSize | orderBy :'created_at':true">
<div class="row">
<div class="col-md-4">
<div class="thumbnail no-border no-margin-bottom">
<img src="https://placehold.it/150x150" alt="bird" width="150" height="150"/>
</div>
</div>
<div class="col-md-8">
<h4 class="no-margin-top no-margin-bottom"><strong>{{post.birdname}}</strong></
</div>
</div>
</a>
<uib-pagination total-items="posts.length" ng-model="currentPage" max-size="pageSize" boundary-link-numbers="true"></uib-pagination>
</div>
</div>
app.js Я также добавил фильтр в app.js:
app.filter('startFrom', function() {
return function(data, start) {
return data.slice(start);
}
});
Когда я console.log(posts.length);
я получаю 0, и я предполагаю, что это из-за $scope.posts = [];
объявленной на вершине (profileCtrl.js).
Edit:
После этого немного отладки с console.log, я получить значение, даваемое при этом:
$http.get('url')
.then(function(result) {
angular.forEach(result.data, function(data, key) {
if(data.userId === auth.profile.user_id) {
$scope.posts.push(data);
}
});
console.log($scope.posts.length);
});
Как мне это исправить?
Ваш комментарий имеет мало смысла, предотвратить $ прицелы показывать? Из того, что вы сказали, похоже, что директива разбиения на страницы не определяет изменение значения, связанного с 'total-items', поэтому мое предложение заключалось в том, чтобы отложить рендеринг компонента разбиения на страницы, пока не будет заполнен массив сообщений что бы вы ожидали увидеть в любом случае. –
Извините, что я хотел сказать, это просто предотвращает отображение страниц, если никаких сообщений не найдено. Однако задержка не решает. (удалил мой комментарий выше, потому что он действительно ничего не делал, извините) – Pex
Вы можете бросить вместе демонстрацию plunkr? Потому что все, кажется, в порядке, если отсрочка не разрешится. –