2013-08-08 30 views
5

Tôi đang sử dụng điều hướng dựa trên băm trong ứng dụng AngularJS của mình bắt nguồn từ /.Tại sao AngularJS sao chép chuỗi truy vấn trong tuyến đường của tôi?

Nếu người dùng điều hướng đến ứng dụng của tôi như thế này:

http://example.com/?foo

Một khoảnh khắc sau khi tải trang, một cái gì đó (có thể là góc) đang gây ra thanh địa chỉ để trông khác hơn tôi mong đợi.

Những gì tôi thấy:

http://example.com/?foo#/?foo

gì tôi mong đợi để xem:

http://example.com/?foo#/

Tại sao điều này xảy ra, và tôi có thể tắt nó đi?

+0

bạn có thể hiển thị nội dung tệp định tuyến góc không? không chắc chắn rằng sẽ giúp đỡ nhưng có lẽ ... –

+0

Tôi chỉ chạy vào vấn đề này và chắc chắn nó sẽ là khó khăn để tìm một giải pháp. Nhưng việc tiêm '$ locationProvider.html5Mode (true) .hashPrefix ('!');' Giải quyết được vấn đề. – EnigmaRM

Trả lời

3

Tôi muốn bạn cần phải ở trong 'chế độ html5' để không có đoạn băm ... mặc dù tôi không chắc chắn.

http://docs.angularjs.org/guide/dev_guide.services. $ Vị trí

$locationProvider.html5Mode(true).hashPrefix('!'); 

Trong cấu hình ứng dụng của bạn, bạn có thể gây rối với cấu hình mà param và nó sẽ có thể thoát khỏi nó.

+0

Tôi không hỏi về đoạn băm. Tôi hỏi về chuỗi truy vấn trùng lặp ở bên phải của băm. Tôi sẽ làm rõ câu hỏi. – djsmith

+0

Để rõ ràng, góc cạnh luôn sao chép mọi thứ bằng đoạn băm theo kinh nghiệm của tôi. Vì vậy, nếu bạn không ở chế độ HTML5, bạn sẽ thấy bản sao, vì góc có thể cập nhật "tìm kiếm" khi chúng được gọi. – RandallB

+0

nếu bạn cập nhật câu trả lời để bao gồm thông tin từ nhận xét của bạn ở trên (và đó thực sự là xác nhận đúng), tôi sẽ đánh dấu nó là câu trả lời đúng. Đó chỉ là những gì tôi cần biết. – djsmith

0

Điều này có vẻ như đang sao chép mã băm bằng đường dẫn.

Kiểm tra dịch vụ vị trí $. Nó có cả hai phương thức path() và hash(). Phần thứ hai, trùng lặp là băm, phần đầu tiên là đường dẫn.

0

Trừ khi bạn đang sử dụng chế độ html5, tất cả phần Angular của URL sẽ xuất hiện trong đoạn. Vấn đề là Angular không biết về phần cơ sở của URL (có lẽ là foo là cần thiết chỉ để có được Angular để tải) vì vậy nó sẽ không cố gắng thao tác nó, nó chỉ đặt những thứ của riêng nó vào như một đoạn .

Tôi đề nghị điều tốt nhất là kiểm tra $window.location.search cho chuỗi truy vấn và nếu bạn tìm thấy một chuyển hướng đến URL bạn thực sự muốn chính mình. Bạn vẫn sẽ cần phải thực hiện chuyển hướng đó bằng cách chỉ định cho $window.location thay vì $location và nó sẽ buộc ứng dụng góc của bạn tải lại nhưng ít nhất bạn sẽ kết thúc nơi bạn muốn đến.

Hoặc bạn có thể cấu hình lại máy chủ web của mình để viết lại thích hợp, nhưng bạn có thể không muốn hoặc không thể làm điều đó.

Hoặc bạn yêu cầu người dùng chỉ sử dụng URL họ nhận được từ ứng dụng, chứ không phải cố gắng tự tạo chúng.

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