5

tôi là tạo ra một ứng dụng tìm kiếm trong angularjs với các thiết lập này:Thay thế cho việc sử dụng các hashbangs trong url để giải quyết vấn đề IE9

App Config:

app.config(
    [ 
     '$locationProvider', 
     function ($locationProvider) { 
      $locationProvider.html5Mode({ 
       enabled: true, 
       requireBase: false, 
       rewriteLinks: false 
      }); 
     } 
    ] 
); 

Vấn đề không phải là ứng dụng riêng của mình nhưng khi im cố gắng truy cập vào trang với IE9 im thì không thể truy cập vào nó. Sau khi đọc xong, tôi phát hiện ra rằng IE9 bỏ qua mọi thứ xuất hiện sau số # trong url và chuyển hướng người dùng trở lại url máy chủ (mọi thứ trướC# trong url) Và dự phòng tiêu chuẩn cho html5mode là chế độ bămbang. Angular docs for $location

Câu hỏi của tôi là nếu có ai biết nếu có bất kỳ cách nào xung quanh việc sử dụng hashbangs trong url hoặc nếu bất kỳ ai khác có vấn đề này. Nếu cần thêm tài liệu, vui lòng cho tôi biết và tôi sẽ cung cấp!

EDIT: Đây là bên trong bộ điều khiển:

$scope.$on('$locationChangeSuccess', function() {; 
     $scope.searchQuery = $location.search()['q']; 
     $scope.search(); 
    }); 

EDIT: "!" Thêm $locationProvider.hashPrefix('!'); sẽ không làm việc bởi vì nó sẽ chỉ làm tăng thêm một sau "#" trong url.

Xem hình ảnh từ tài liệu góc:

Angular docs on locationprovider

+0

"Sau khi thực hiện đọc som tôi phát hiện ra IE9 bỏ qua mọi thứ xuất hiện sau số # trong url và chuyển hướng người dùng trở lại url máy chủ ". Thats cách băm trong URL hoạt động. Góc hoạt động bằng cách lấy nó và phân tích nó thành một url có thể sử dụng nội bộ. –

+0

Vì vậy, vấn đề là gì? Tại sao bạn không thể truy cập nó trong IE9? Bạn có thực hiện bất kỳ khắc phục sự cố nào không? Dự phòng là chính xác, như chúng ta có thể thấy tại tài liệu. – falsarella

Trả lời

0

IE9 không hỗ trợ history.pushState, xem: http://caniuse.com/#feat=history

Vì vậy khi bạn kích hoạt html5Mode như: $locationProvider.html5Mode(true) Đối với IE9 nó sẽ dự phòng để cáC# trong URL - không có cách nào xung quanh

Có nói rằng bạn vẫn có thể sử dụng $location.search(); Bạn có thể lấy params tìm kiếm như thế này: var searchObject = $location.search(); Để có được một thông số cụ thể mà bạn có thể làm: $location.search().paramName

Xem https://docs.angularjs.org/api/ng/service/ $ vị trí để biết thêm thông tin.

Một thay thế cho dịch vụ $location là để tiêm $routeParams, xem: https://docs.angularjs.org/api/ngRoute/service/ $ routeParams Nhưng im không chắc chắn về trường hợp sử dụng của bạn, routeParams chỉ được cập nhật sau khi một sự thay đổi tuyến đường được hoàn thành

+0

Tôi đã bật html5Mode nhưng trong IE9, ứng dụng của tôi bị kẹt trong một vòng lặp vô hạn trực tiếp. Làm thế nào để tôi có thể quay trở lại #urls để hoạt động chính xác? – duyn9uyen

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