2016-08-05 57 views
0

Ich bin Neuling in ionischen und konfrontiert Problem mit: Ich muss laden und laden Sie meine Vorlage um 1 und 1 Minute, und es ist in Ordnung zum ersten Mal, aber wenn die Funktion, die Datensätze aus Der Server wird erneut aufgerufen, die Vorlage wird nicht bereinigt. Fügen Sie die Datensätze einfach noch einmal hinzu. Wenn ich also nur einen Datensatz auf dem Server habe, zeigt er mir zwei auf der ersten Minute, drei auf der zweiten Minute und nacheinander.Liste Refresh/Reload Vorlage

Ich habe versucht: Cache = falsch, window.reload, state.reload, state.go und viele andere versucht, aber nichts gibt das Ergebnis, das ich brauche, denn ich brauche einfach, dass der Inhalt der Liste ersetzt und nicht hinzugefügt wird . Mein Code:

list = function() { 
$http.post(G.URL + 'page.jsp') 
    .then(function (response) { 
     $scope.total = response.data.records.length; 
     $scope.items = response.data.records; 
     $scope.counter = 1; 
    }, function (error) { $scope.items = "Nothing"; });} 

$interval(function() { 
$scope.counter += 1; 
if ($scope.counter > 59) { 
    $scope.counter = 1; 
    list(); 
    //$ionicHistory.clearCache([$state.current.name]).then(function() { $state.reload(); }); } }, 1000); 

Vielen Dank im Voraus

Antwort

1

Eines der Dinge, thats, passiert, ist, dass Sie das Update nicht zu sehen, weil Sie nicht den neuen Bereich zu verdauen. $ scope. $ apply() und $ timeout() führen einen Digest-Zyklus aus, damit der Bereich aktualisiert und neue Werte angezeigt werden können. $ http-Aufrufe benötigen Zeit, um zum Client zurückzukehren. Wenn Sie den Bereich mit verzögerten Werten aktualisieren, sollten Sie einen Digest-Zyklus ausführen. Ich habe Ihren Code ebenfalls bereinigt.

.controller('Ctrl', function($scope, G, $interval, $http, $timeout) { 
    // always initialize your scope variables 
    angular.extend($scope, { 
    total: 0, 
    items: [] 
    }); 

var list = function() { 
    $http.post(G.URL + 'page.jsp') 
    .then(function (response) { 
     angular.extend($scope, { 
     total: response.data.records.length, 
     items: response.data.records 
     }); 
     $timeout(); // this is used to reload scope with new delayed variables 
    }, function (err) { 
     console.error(JSON.stringify(err)); 
    }); 
    }; 

    // call list every 1000 milliseconds * 60 = 1 minute 
    $interval(list, 1000 * 60); 

    // call list on page load so you don't wait a minute 
    list(); 
}); 
+0

tothefux, vielen Dank, löste das Problem, ich war seit Wochen für die auf Google suchen, aber nichts, was es wirklich lösen ... –

+0

Kein Problem Luciano, froh, dass ich helfen konnte. Bitte markieren Sie die Antwort als akzeptiert, damit ich ein paar Pluspunkte bekommen kann! – tothefux