2015-03-23 16 views
6

Tôi có này hai nút trong html của tôi:history.pushState không làm việc trong điều khiển

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

sau đó trong bộ điều khiển của tôi:

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

và chức năng getNextPage là:

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

    } 

}; 

Url của tôi trông giống như sau:

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

chức năng getQuestion chỉ nhận được của dữ liệu từ máy chủ, tôi đã thử nghiệm nó ra và nó trả lại dữ liệu với không có vấn đề, trên thực tế nó trả lại dữ liệu ở tải trang với không có vấn đề.

điều tôi đang cố gắng làm là thay đổi URL và nhận câu hỏi tiếp theo hoặc trước đó bằng cách nhấp vào các nút đó. nhưng những gì đang xảy ra là nó gọi hàm getQuestion nhưng URL không thay đổi. nếu tôi nhìn rất gần với URL và chú ý nó sẽ thay đổi và trở lại trang trước rất nhanh, chỉ cần một đèn flash!

Tôi không có gì trong mã của mình để trở về trang trước.

những gì tôi thử là thêm console.log vào hàm getNextPage để xem nó có gọi hai lần hay không, nhưng không, nó chỉ gọi một lần cho mỗi lần nhấp.

nếu tôi cố gắng pushState trong bảng điều khiển, nó hoạt động!

Tôi cũng thêm nhật ký bảng điều khiển ở cuối hàm getQuestion để xem liệu nó có bị kẹt ở giữa chức năng không, nhưng không! Nhật ký bàn điều khiển đang diễn ra nhưng nó trở về trang trước.

Tôi chỉ thử nghiệm một cách tuyệt vọng, nhưng không may mắn.

+0

Điều này gây phiền toái cho tôi vì tôi không sử dụng ngRoute và chỉ sử dụng Angular cho một vài thứ và muốn thực hiện một số lệnh 'pushState' không có sẵn. Tôi đã nhận thấy gói trong một công việc 'setTimeout', nhưng' document.location.search' vẫn trả về giá trị cũ. –

Trả lời

1

một năm tôi đã đấu tranh với vấn đề này và bây giờ tôi hiểu nó. nó không hoạt động như thế nào. tôi nên sử dụng mô-đun ngRoute để cung cấp điều hướng. nó không phải về pushstate không hoạt động hay cái gì khác, nó về cách hoạt động của góc.

tôi không cần $scope.GoToNext hoặc $scope.GoToPrev để điều hướng vì góc sẽ tự động làm điều đó cho tôi. chỉ cần thay đổi lộ trình và hoàn thành nó. mọi thứ đều hoạt động tốt.

-2

pushState được hỗ trợ không nhất quán trên các nền tảng trình duyệt khác nhau. Hãy thử History.js để thay thế.

+0

như tôi đã nói, nó hoạt động nếu tôi thử nó trong giao diện điều khiển, do đó, nó hoạt động và không có vấn đề với trình duyệt. –

+0

bạn có thể làm cho nó hoạt động không? –

+0

không có bro, tôi thay đổi mã của mình và tôi cố gắng làm cho nó hoạt động với ui-router (vì nhiều chế độ xem) –

Các vấn đề liên quan