2015-03-23 32 views
6

mam to dwa przyciski w moim HTML:history.pushState nie działa kontroler

<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> 

następnie w moim kontrolera:

$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(); 
} 

i funkcji getNextPage brzmi:

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)); 

    } 

}; 

Mój adres URL wygląda następująco:

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

funkcja getQuestion tylko uzyskać te dane z serwera, już przetestowane go i zwróci dane bez problemu, faktycznie zwróci dane na stronie obciążenia bez problemu.

Próbuję zmienić adres URL i uzyskać następne lub poprzednie pytanie, klikając te przyciski. ale to, co się dzieje, to wywołanie funkcji getQuestion, ale adres URL się nie zmienia. jeśli uważnie przyjrzę się adresowi URL i zwrócę uwagę, że zmienia się i wraca do poprzedniej strony bardzo szybko, tylko flash!

Nie mam nic w moim kodzie, aby powrócić do poprzedniej strony.

Próbuję dodać konsolę console.log do funkcji getNextPage, aby sprawdzić, czy wywołuje ona dwa razy, ale nie, po prostu dzwoń raz dla każdego kliknięcia.

jeśli próbuję pushState w konsoli, to działa!

Dodaję również log konsoli na końcu funkcji getQuestion, aby sprawdzić, czy utknie w środku funkcji, ale nie! log konsoli dzieje się, ale powraca do poprzedniej strony.

Po prostu desperacko testuję rzeczy, ale bez powodzenia.

+0

To jest dla mnie denerwujące, ponieważ nie używam ngRoute i po prostu używam Angulara dla kilku rzeczy i chcę zrobić jakiś ręczny 'pushState' bezskutecznie. Zauważyłem, owijanie w 'setTimeout' działa, ale' document.location.search' nadal zwraca starą wartość. –

Odpowiedz

1

rok temu, walczyłem z tym problemem i teraz go rozumiem. nie działa jak kąt. Powinienem użyć modułu ngRoute, aby zapewnić nawigację. nie chodzi o to, że pushstate nie działa lub coś innego, o tym, jak działa kątowo.

Nie potrzebuję $scope.GoToNext ani $scope.GoToPrev do poruszania się, ponieważ kątowe zrobi to automatycznie. po prostu zmień trasę i ją zakończ. wszystko dziala.

-2

pushState jest niespójnie obsługiwany na różnych platformach przeglądarki. Zamiast tego spróbuj History.js.

+0

jak powiedziałem, działa, gdy próbuję go w konsoli, więc działa i nie ma problemu z przeglądarką. –

+0

byłeś w stanie go uruchomić? –

+0

no bro, zmieniam kod i próbuję go uruchomić z ui-routerem (z powodu wielu widoków) –