Ионная функция бесконечной прокрутки, вызываемая при загрузке страницы
Я использую Ionic framework для создания базового приложения подачи. Я получил обновление, но у меня проблемы с моим ионным бесконечным свитком.
кормить.HTML-код
<ion-content ng-controller="FeedController" >
<ion-refresher pulling-text="Pull to refresh.." on-refresh="get_feeds()" refreshing-text="Fetching ..." refreshing-icon="ion-loading-b">
</ion-refresher>
<ion-list>
<ion-item ng-repeat="question in questions">
<div class="item item-divider">
{{question.question}}
</div>
<div class="item" ng-bind-html="question.answer | trustHtml">
</div>
</ion-item>
</ion-list>
<ion-infinite-scroll
on-infinite="get_more()"
distance="1%">
</ion-infinite-scroll>
</ion-content>
кормить.js
(function(){
"use strict";
angular.module( 'app.controllers' ).controller( 'FeedController',
[ 'eTobb', 'Users', '$scope', '$timeout', function( eTobb, Users, $scope, $timeout) {
var pageIndex = 1;
$scope.questions = [];
$scope.get_feeds = function(pageIndex){
eTobb.get($scope.apiCall, { user_id: Users.id, page: 0 }, function(response) {
if ( response ){
$scope.questions = $scope.questions.concat(response);
console.log($scope.questions);
}
})
.finally(function(){
$scope.$broadcast('scroll.refreshComplete');
$scope.$broadcast('scroll.infiniteScrollComplete');
});
};
$scope.get_more = function(){
$scope.get_feeds(pageIndex);
pageIndex = pageIndex + 1;
console.log('why the hell am i being called?');
};
}
]);
})();
вопрос
метод, определенный в свойстве on-infinite, вызывается два раза при загрузке страницы, а затем вызывается нормально (один раз) каждый раз при достижении нижней части страницы. Кто-нибудь знает, почему это происходит?
4 ответов
Я также столкнулся с этой проблемой, однако, используя ng-if не решил проблему, и я не считаю, что это правильный способ решить эту проблему.
по данным ионной тут документация, вы бы использовали только ng-if, чтобы указать, что дополнительные данные недоступны, и предотвратить бесконечный скроллер от дополнительных вызовов метода "get_more".
то, что я нашел причиной этого неожиданного вызова "get_more ()" во время загрузки страницы, было связано с бесконечный скроллер думает, что во время первой загрузки было недостаточно контента (т. е. начальная загрузка не дала достаточно результатов для заполнения страницы), и поэтому он сразу же инициировал другой запрос на загрузку.
в моем конкретном сценарии я вернул более чем достаточно записей, чтобы заполнить страницу, однако бесконечный скроллер все еще запрашивал больше. Мой список был в основном заполнен изображениями, и я думаю, что скроллер неправильно вызывал "get_more ()" из - за проблемы с синхронизацией между загрузкой изображений и проверкой заполнения страницы.
в любом случае, решение моей проблемы состояло в том, чтобы сказать ему не выполнять немедленную проверку границ при загрузке; вы делаете это с атрибутом immediate-check, т. е.:
<ion-infinite-scroll immediate-check="false" on-infinite="vm.localDataManager.getData()" ng-if="vm.localDataManager.canGetData()" distance="1%">
ответ RMD решил проблему для меня на компьютере, но при запуске моего приложения на Android my vm.loadMore()
функция была вызвана немедленно, хотя immediate-check="false"
был установлен на моем ion-infinite-scroll
элемент. Я решил это, добавив вспомогательную переменную vm.initialSearchCompleted = false;
контроллеру, и моему ion-infinite-scroll
элемент такой:
<ion-infinite-scroll
on-infinite="vm.loadMore()"
distance="1%"
immediate-check="false"
ng-if="vm.canLoadMoreResults && vm.initialSearchCompleted">
</ion-infinite-scroll>
при первоначальном вызове my vm.search()
функция была завершена, я установил vm.initialSearchCompleted = true;
. Это решило проблему.
вы можете использовать ng-if на ION-infinite-scroll, поэтому, когда нет данных, обработчик on-infinite не будет вызываться.
<ion-infinite-scroll
on-infinite="get_more()"
distance="1%"
ng-if="questions.length">
</ion-infinite-scroll>
ответ "ионная бесконечная функция прокрутки, вызываемая при загрузке страницы"
immediate-check="false"
on ion-infinite-scroll