2016-05-02 9 views
0

I $ Uhr für die Paginierung der Daten verwende in meinem page.But Es ist nicht Daten, die zeigen, bis ich

hier auf eine der Schaltflächen klicken Sie auf den Code.

.controller('AppCtrl', function ($scope, $modal, Faq) { 
    $scope.filteredFaqData = []; 
    $scope.currentPage = 1; 
    $scope.numPerPage = 5; 
    $scope.maxSize = 5; 
    $scope.faqData = []; 
    $scope.faqData = Faq.getFaqs(); 
    $scope.$watch('currentPage + numPerPage', function() { 
     var begin = (($scope.currentPage - 1) * $scope.numPerPage) 
      , end = begin + $scope.numPerPage; 
     $scope.filteredFaqData = $scope.faqData.slice(begin, end); 
    }); 
}) 

Ich erhalte die Daten in dem $ scope.faqData vom Service bereitzustellen der $ scope.filteredFaqData ist leer, bis ich auf dem Paging-Tabs klicken

+0

eingestellten Grundwert auf $ scope.filteredFaqData = 5 nicht mit leeren [], oder, "current + numPerPage Jargon nicht verstehen, wenn Sie wollen, sehen mehr als einen Umfang varible Verwenden Sie Watch Groups http://stackoverflow.com/questions/11952579/watch-multiple-scope-attributes – nisar

+0

@nisar Es hat keine Änderung vorgenommen. Immer noch das gleiche Problem – Shahzad

+0

Überprüfen Sie einen Fehler in der Konsole !!! – nisar

Antwort

0

Eigentlich wurde meine Funktion Faq.getFaqs() asynchron ausgeführt. Wenn die Seite zum ersten Mal geladen wird, wurden keine Daten angezeigt. Also habe ich $ timeout benutzt um die $ watch zu dilayern und es funktioniert jetzt. Hier

ist der Code

$scope.filteredFaqData = []; 
    $scope.currentPage = 1; 
    $scope.numPerPage = 5; 
    $scope.maxSize = 5; 
    $scope.faqData = []; 

     $scope.faqData = Faq.getFaqs(); 
     $timeout(function lateDisplay(){ 
      $scope.$watchGroup(['currentPage','numPerPage'], function (newValues, oldValues, scope) { 
       var begin = ((newValues[0] - 1) * newValues[1]) 
       , end = begin + newValues[1]; 

       $scope.filteredFaqData = $scope.faqData.slice(begin, end); 
      }); 
     },100); 
+1

Hey, großartig, dass du das Problem gefunden hast. Ich würde Ihnen empfehlen, nicht $ Timeout, sondern stattdessen Promises zu verwenden. Diese wären ideal für Ihre Situation. Lesen Sie mehr über Versprechen in eckigen hier: https: //docs.angularjs.org/api/ng/service/$ q – Fidel90

+0

@ Fidel90 Macht es einen Unterschied? Ich meine, kann es ein Problem im Programm verursachen? – Shahzad

+1

Nun, Sie können nicht darauf wetten, dass Ihre http-Anfrage immer innerhalb von 100ms abgeschlossen wurde. Sobald Ihre Anfrage ein wenig länger dauert (wegen einer schlechten Verbindung oder was auch immer), wird Ihr $ Timeout zu schnell ausgeführt und Ihre Daten sind nicht verfügbar. Ein Versprechen garantiert, dass die Daten bereit sind, damit gearbeitet wird. Einen tieferen Einblick in Promises zu nehmen, ist die Mühe wert :) – Fidel90

0

Vielleicht wird dies die Trick:

.controller('AppCtrl', function ($scope, $modal, Faq) { 

    //create function that can be called on several places 
    var updateFilteredData = function() { 
     var begin = (($scope.currentPage - 1) * $scope.numPerPage), 
      end = begin + $scope.numPerPage; 

     $scope.filteredFaqData = $scope.faqData.slice(begin, end); 
    }; 

    $scope.filteredFaqData = []; 
    $scope.currentPage = 1; 
    $scope.numPerPage = 5; 
    $scope.maxSize = 5; 
    $scope.faqData = Faq.getFaqs(); 

    $scope.$watchGroup(['currentPage', 'numPerPage'], function() { 
     //call on update 
     updateFilteredData(); 
    }); 

    //initial call 
    updateFilteredData(); 
}); 

Hinweis: Bessere Nutzung watchGroup wie es winkelförmigen Stangen Art und Weise zu tun, was Sie wollen (documentation).

+0

funktionierte nicht immer noch Seite lädt ohne Daten, aber wenn ich auf die Auslagerungsregisterkarten Daten klicken, erscheint. – Shahzad

+1

Wie funktioniert Ihre 'Faq.getFaqs()' Funktion? Ist es sicher, dass die Daten sofort verfügbar sind? Oder ist es eine asynchrone Funktion, die das Ergebnis in der Zukunft hält? Vielleicht gibt es kein Ergebnis, wenn der Filter initial läuft ... – Fidel90

+0

Ich bekomme die Daten vom Dienst hier ist der Code 'var self = this; this.faqList = []; $ http.get ('/ Json/faq.json'), dann (function (result) { result.data.forEach (function (item) { self.addfaq (Artikel) }) }). this.getFaqs = function() { Rückgabe this.faqList; }; ' – Shahzad

Verwandte Themen