2017-04-30 8 views
1

Ich verwende Smart Table und möchte zu einer bestimmten Seite springen, sobald der Controller erstellt und die Tabelle angezeigt wird.Smart Table: programmierte Seite

fand ich diesen Code-Snippet diese programmatisch here auf Stackoverflow zu tun:

angular.element($('#pagination')).isolateScope().selectPage(pageNumber); 

„Paginierung“ ist die HTML-ID meiner Smarttable der Paginierung div. Ich kann dies nicht aufrufen, bis der Controller beendet wird, da isolateScope "undefined" zurückgibt. Also dachte ich, ich würde es ein paar Millisekunden später nennen, um sicherzustellen, dass die Tabelle/Seite vollständig erstellt wurde.

selectPage funktioniert von meiner benutzerdefinierten Paginierung, funktioniert es, wenn ich es von einer Schaltfläche am unteren Rand der Seite aufrufen, aber nicht, wenn es von einem Timer aufgerufen wird. Ich habe die Quelle in die Smart Tables-Funktionen selectPage() und pipe() zurückverfolgt, und ich kann den Unterschied nicht sehen - einer funktioniert und der andere nicht.

Siehe die Plunker: Drücken Sie eine Taste und es wird wie erwartet auf Seite 5 springen. Drücken Sie die andere Taste, um einen 3s-Timer einzustellen, der auf Seite 2 springt und nichts passiert ...

+0

hier verwendete ich eine Richtlinie sicherstellen, dass der Code ausgeführt wird, wenn DOM bereit ist (plus ich wartete 1s ..) http://plnkr.co/edit/uKAz5yg5Q k0puXtDUu8X? p = Vorschau obwohl dieser Code nicht stabil genug scheint –

+0

Danke dafür. Es scheint zu funktionieren. Warum denkst du, dass es nicht stabil ist? –

+0

aber ... es erklärt immernoch nicht, warum mein Plunker nicht funktioniert :-(frustrierend. –

Antwort

2

Offenbar gibt es einen besseren Weg, von außen mit smart-table zu kommunizieren.

Wenn Sie bewegen, um die st-table Richtlinie zu einem äußeren div (in diesem Fall auf den Körper):

<body ng-controller="mainCtrl" st-table="displayed"> 

dann können wir eine Richtlinie erstellen, die das Plugin-Controller benötigen und seine Funktionen nutzen:

app.directive('handlePagination', function ($timeout) { 
    return { 
     require: '^stTable', 
     restrict: 'AE', 
     transclude: true, 
     template: '<button class="btn btn-success btn-xs" ng-click="" ng-transclude></button>', 
     scope: { 
      goToPage: '@', 
      delay: '@' 
     }, 
     link: function link(scope, element, attrs, controller) { 
      scope.delay = scope.delay || 0; 
      element.on('click', function() { 
       var page = scope.goToPage; 
       if (page > 0 && page <= controller.tableState().pagination.numberOfPages) { 
       $timeout(function() { 
        controller.slice((page - 1) * controller.tableState().pagination.number, controller.tableState().pagination.number); 
       }, scope.delay) 
       } 
      }) 
     } 
    }; 
}); 

sehen diese plnkr

+0

Vielen Dank!! Das funktioniert sehr gut. Smart Table sollte dies in ihrer erweiterten Dokumentation ausführlich beschreiben. –

Verwandte Themen