2015-03-23 8 views
6

У меня есть эти две кнопки в моем HTML:history.pushState не работает в контроллере

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

затем в мой контроллер:

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

и функции getNextPage является:

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

    } 

}; 

мой адрес выглядит следующим образом:

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

функция getQuestion просто получить данные с сервера, я уже протестировали его и вернуть данные без проблем, на самом деле вернуть данные на странице загрузки без проблем.

Что я пытаюсь сделать, это изменить URL-адрес и получить следующий или предыдущий вопрос, нажав на эти кнопки. но то, что происходит, вызывает функцию getQuestion, но URL-адрес не изменяется. если я очень внимательно отношусь к URL-адресу и обращу внимание на его изменения, вернемся к предыдущей странице очень быстро, просто вспышка!

У меня нет ничего в своём коде для возврата на предыдущую страницу.

что я пытаюсь добавить console.log в функцию getNextPage, чтобы увидеть, если он вызывает дважды, но это не так, он просто вызывает один раз для каждого щелчка.

если я пытаюсь нажать кнопкуState в консоли, это сработает!

Я также добавляю консольный журнал в конце моей функции getQuestion, чтобы проверить, не застрял ли он в середине функции, но нет! консольный журнал происходит, но он возвращается на предыдущую страницу.

Я просто отчаянно проверяю вещи, но не повезло.

+0

Это раздражает меня, потому что я не использую ngRoute и просто использую Angular для нескольких вещей и хочу сделать ручную 'pushState' безрезультатно. Я заметил, что обертка в 'setTimeout' работает, но' document.location.search' по-прежнему возвращает старое значение. –

ответ

1

year a go Я боролся с этой проблемой, и теперь я понимаю это. его не как угловые работы. Я должен использовать модуль ngRoute для навигации. его не о том, что pushstate не работает или что-то еще, о том, как работает угловой.

Мне не нужен $scope.GoToNext или $scope.GoToPrev для навигации, потому что угловой сделай это для меня автоматически. просто измените маршрут и сделайте это. все работает нормально.

-2

pushState не поддерживается на разных платформах браузера. Вместо этого попробуйте History.js.

+0

как я уже сказал, он работает, если я пытаюсь использовать его в консоли, поэтому он работает и проблем с браузером нет. –

+0

Вы могли заставить его работать? –

+0

no bro, я меняю свой код, и я пытаюсь заставить его работать с ui-router (из-за нескольких просмотров) –

Смежные вопросы