2015-03-23 7 views
6

Ich habe diese beiden Tasten in meinem html:history.pushState arbeitet nicht in der Steuerung

<a href="" class="sbtn sbtn-default" ng-click="GoToNext()"><i class="fa fa-angle-right"></i> Next </a> 
<a href="" class="sbtn sbtn-default" ng-click="GoToPrev()"> Prev <i class="fa fa-angle-left"></i></a> 

dann in meinem Controller:

$scope.GoToNext = function() { 
    var nextPage = getNextPage("next"); 

    history.pushState(null, "Site Title", nextPage); 
    getQuestion(); 
} 

$scope.GoToPrev = function() { 
    var prevPage = getNextPage("prev"); 

    history.pushState(null, "Site Title", prevPage); 
    getQuestion(); 
} 

und die getNextPage Funktion ist:

function getNextPage(type) { 

    var querystr = window.location.pathname.split('/')[4]; 
    var currentQuestion = querystr.split("-")[1]; 
    var currentBook = querystr.split("-")[0]; 

    switch (type) { 
     case "next": 
      return ((currentBook + "-") + (+currentQuestion + +1)); 

     case "prev": 
      if (currentQuestion == 1) 
       return (currentBook + "-1"); 

      return ((currentBook + "-") + (+currentQuestion - +1)); 

    } 

}; 

meine Url sieht wie folgt aus:

http://localhost:14799/app/Dashboard/Question/1-330

getQuestion Funktion nur die Daten der vom Server erhalten, Getestet habe ich es bereits und es die Daten ohne Probleme zurückgeben, es tatsächlich die Daten auf Seite Last ohne Probleme zurück.

was ich versuche, ist die URL zu ändern und die nächste oder vorherige Frage durch Klicken auf diese Schaltflächen zu erhalten. aber was passiert ist, ruft die Funktion getQuestion auf, aber die URL ändert sich nicht. wenn ich sehr genau auf die URL schaue und darauf achte, dass sie sich ändert und sehr schnell zur vorherigen Seite zurückkehrt, nur ein Blitz!

Ich habe nichts in meinem Code, um zur vorherigen Seite zurückzukehren.

was ich versuche ist console.log in getNextPage Funktion hinzufügen, um zu sehen, ob es zweimal aufrufen, aber es nicht, es nur einmal für jeden Klick aufrufen.

Wenn ich versuche, in der Konsole drücken, funktioniert es!

Ich habe auch am Ende meiner getQuestion-Funktion ein Konsolenprotokoll hinzugefügt, um zu sehen, ob es in der Mitte der Funktion stecken bleibt, aber nein! Konsolenprotokoll wird ausgeführt, aber es wird zur vorherigen Seite zurückgekehrt.

Ich gerade verzweifelt Dinge testen, aber kein Glück.

+0

Das nervt mich, weil ich nicht ngRoute benutze und nur Angular für ein paar Dinge benutze und einige manuelle "PushState" ohne Erfolg machen möchte. Ich habe bemerkt, dass das Wrapping in 'setTimeout' funktioniert, aber' document.location.search' gibt immer noch den alten Wert zurück. –

Antwort

1

Jahr habe ich mit diesem Problem gekämpft und jetzt verstehe ich es. es funktioniert nicht wie kantig. Ich sollte das verwendete ngRoute-Modul verwenden, um Navigationen bereitzustellen. es geht nicht darum, dass der Pushstate nicht funktioniert oder etwas anderes, es geht darum, wie eckig funktioniert.

ich brauche nicht $scope.GoToNext oder $scope.GoToPrev zum Navigieren, weil Winkel würde es für mich automatisch tun. Ändere einfach die Route und es ist fertig. Alles funktioniert gut.

-2

pushState wird auf verschiedenen Browser-Plattformen inkonsistent unterstützt. Versuchen Sie stattdessen History.js.

+0

wie gesagt, es funktioniert, wenn ich es in der Konsole versuche, so funktioniert es und es gibt kein Problem mit dem Browser. –

+0

konnten Sie es zur Arbeit bringen? –

+0

no bro, ich ändere meinen Code und ich versuche, es mit ui-Router (wegen mehrerer Ansichten) zu arbeiten –