Ionic infinite scroll function wird beim Laden der Seite aufgerufen
Bin ich mit dem ionic-framework, zum erstellen eines einfachen Feed-app. Ich habe die Auffrischung geht, aber ich habe Probleme mit meinem Ionen-infinite-scroll.
Feed.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>
Feed.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?');
};
}
]);
})();
Problem
Die Methode definiert, auf die auf-unendlich Eigenschaft nennt man zwei mal, wenn die Seite geladen wird und dann aufgerufen wird in der Regel (einmal) jedes mal, wenn das Ende der Seite erreicht ist.
Weiß jemand, warum dies passiert?
InformationsquelleAutor der Frage Jad Salhani | 2015-01-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich lief auch dieses Problem, allerdings mit ng-falls das problem nicht lösen, ich glaube auch nicht, dass es der richtige Weg, um dieses Problem zu lösen.
Laut Ionic ist DokumentationSie würden nur verwenden, ng-wenn, um anzuzeigen, dass keine weiteren Daten verfügbar sind, und um zu verhindern, dass die unendliche scroller machen, zusätzliche Aufrufe an die "get_more" - Methode.
Was ich gefunden habe, um die Ursache dieser unerwarteten "get_more()" aufrufen, während eine Seite geladen wurde, die aufgrund der unendlichen scroller denken, es war nicht genug Inhalt in den ersten laden (sprich: die anfängliche Belastung nicht genügend Ergebnisse, die zum füllen der Seite), und als solche sofort eingeleitet Belastung verlangen.
In meinem Szenario habe ich zurückgegeben hatte mehr als genug Aufzeichnungen, um die Seite ausgefüllt, aber die unendliche scroller war immer noch die mehr. Meine Liste war meist gefüllt mit Bildern, und ich denke, dass der scroller war unangemessen Aufruf der "get_more()" aufgrund der timing-Probleme zwischen, wenn die Bilder geladen wurden und wenn es überprüft, um zu sehen, wenn die Seite gefüllt war.
In jedem Fall die Lösung für mein problem war es zu sagen, dass Sie nicht führen Sie eine sofortige bounds-check auf Last; Sie tun dies mit dem sofort-check-Attribut, ie:
InformationsquelleAutor der Antwort RMD
RMD Antwort löste das Problem für mich auf einem Rechner, aber beim ausführen meiner app auf mein Android
vm.loadMore()
- Funktion aufgerufen wurde, sofort, obwohlimmediate-check="false"
wurde auf meineion-infinite-scroll
element. Ich löste es durch hinzufügen einer Helfer-variablevm.initialSearchCompleted = false;
an den controller, und zu meinerion-infinite-scroll
element wie diesem:Beim ersten Aufruf von meine
vm.search()
Funktion abgeschlossen wurde, habe ichvm.initialSearchCompleted = true;
. Das hat das problem gelöst.InformationsquelleAutor der Antwort L42
Können Sie verwenden, ng-if-Ionen-unendlich-scroll, also wenn keine Daten vorhanden sind, wird der handler auf-unendlich nicht aufgerufen werden.
InformationsquelleAutor der Antwort Shripal Soni
Die Antwort "Ionic unendliche scroll-Funktion aufgerufen, die beim laden der Seite' ist
immediate-check="false"
aufion-infinite-scroll
InformationsquelleAutor der Antwort Téwa