Ho una pagina con alcune schede e ogni scheda ha una grande quantità di collegamenti angularjs. This è la pagina di esempio in cui sono di fronte al problema. Ogni scheda richiede circa 10 secondi per il rendering.Scheda Angularjs Caricamento spinner durante il rendering
Quindi ho pianificato di fornire uno spinner di caricamento durante il rendering delle schede. Quindi ho programmato di mostrare lo spinner di caricamento durante il clic sulla linguetta e rimuovere la ghiera alla fine ($last
) della ng-repeat.
Nel ng-click sulla scheda ho attivato la filatura loader
<ul>
<li ng-repeat="tab in tabs"
ng-class="{active:isActiveTab(tab.url)}"
ng-click="onClickTab(tab)">{{tab.title}}
</li>
</ul>
controller
$scope.onClickTab = function (tab) {
showLoader();
$scope.currentTab = tab.url;
}
Per controllare ng-repeat è completa ho usato qui di seguito direttiva
.directive('onFinishRender', function ($timeout) {
return {
restrict: 'A',
link: function (scope, element, attr) {
if (scope.$last === true) {
$timeout(function() {
scope.$emit('ngRepeatFinished');
});
}
}
}
});
$scope.$on('ngRepeatFinished', function (ngRepeatFinishedEvent) {
removeLoader();
});
showLoader e removeLoader sono semplici funzioni che aggiungono e rimuovono il div avendo un semplice spin di caricamento ner.
function showLoader() {
$('body').append('<div class="loader"></div>');
}
function removeLoader() {
$('.loader').fadeOut(function() {
$(this).remove();
});
}
Risultato atteso:. Loader Spinning da visualizzare quando si fa clic sulla scheda e appaiono fino finiture ng-repeat (cioè la scheda cliccato rende completamente)
risultato effettivo: Il caricatore non viene visualizzato quando si fa clic su scheda e appare quasi alla fine di ng-repaet e appare per una frazione di secondi. Here è possibile osservare il suddetto comportamento. Penso che la pagina non sia in grado di mostrare lo spinner a causa del processo di binding angolare che rende il congelamento della pagina.
Qualcuno può aiutarmi a risolvere questo?
La mia risposta è corretta perché è originata da un thread SO scritto dall'autore di Angular che affronta questo esatto problema con lo sfarfallio dello schermo in fase di caricamento a causa di associazioni di dati.Oltre alle 2 soluzioni che ti ho offerto, ti suggerisco anche di utilizzare i binding di dati a 1 via nei punti in cui non hai bisogno di un binding di dati a 2 vie (se la maggior parte delle persone come te ha bisogno solo di un binding di dati a 1 via attraverso la maggior parte della tua app se non di tutte esso). Questo può essere fatto facilmente includendo un doppio colon all'interno delle espressioni legate ai dati come {{:: member.name}} –
Demo di lavoro e, soprattutto, la soluzione corretta aggiunta alla mia risposta. Rinuncia a quella taglia! –
Penso che OP possa leggere tutte le risposte e poi decidere quale attribuire la taglia (se esiste) tutto da solo? –