2013-07-21 29 views
48

Có thể thêm url cơ sở vào tất cả tuyến đường trong ứng dụng AngularJS không? Về cơ bản thay đổi vị trí của nó trên máy chủ (loại, nếu điều đó có ý nghĩa ... vì vậy nó sẽ được truy cập không thông qua '/' nhưng thông qua '/ something /').ngĐịa chỉ đặt tuyến đường cơ sở cho tất cả tuyến đường

Để thêm một số ngữ cảnh, tôi đang cố gắng đặt một ứng dụng Góc hiện có sau một số xác thực sao cho ứng dụng bây giờ sẽ được truy cập tại địa chỉ http://mysite/secure sau khi đăng nhập thành công.

Vấn đề là nếu tôi tải ứng dụng tại http://mysite/secure hoạt động tốt (máy chủ rõ ràng sẽ phân phối đúng trang), nhưng nhấp vào bất kỳ liên kết nào sẽ dẫn đến tải lại trang và chuyển đến http://mysite/#newpage thay vì http://mysite/secure/#newpage.

Không thêm/an toàn/cho tất cả tuyến đường và phần tử liên kết là điều này có thể? Chúc mừng, xin lỗi nếu điều đó không được diễn đạt tốt.

+0

thể trùng lặp của [? Làm thế nào để thiết lập vị trí gốc cho AngularJS Router] (http://stackoverflow.com/questions/17319715/how-to-set-root-location- for-angularjs-router) –

Trả lời

37

Đặt thẻ HTML5 <base> có thể hữu ích. Từ các tài liệu here:

liên kết tương đối

Hãy chắc chắn để kiểm tra tất cả các liên kết tương đối, hình ảnh, kịch bản vv Bạn phải thể chỉ định các cơ sở url vào đầu của tập tin html chính của bạn (<base href="/my-base">) hoặc bạn phải sử dụng các url tuyệt đối (bắt đầu bằng /) ở mọi nơi vì các url tương đối sẽ được giải quyết thành các url tuyệt đối bằng url tuyệt đối ban đầu của tài liệu, thường khác với gốc của ứng dụng.

Chạy ứng dụng Góc với API lịch sử được bật từ gốc tài liệu được khuyến khích mạnh vì nó xử lý tất cả các vấn đề liên quan tương đối.

+1

Tôi đã thử đặt thẻ nhưng không thể làm cho nó hoạt động, ví dụ trong tài liệu xuất hiện thậm chí không sử dụng nó. Dựa trên đoạn thứ hai ở trên, tôi có thể kết luận, nếu không cho công việc cần thiết để cập nhật tất cả các liên kết trong trường hợp của tôi, bao gồm cả giá trị tuyến đường bổ sung sẽ tốt hơn là cố gắng đặt url cơ sở 'toàn cầu'? – adamK

+0

Để cập nhật tất cả các liên kết, có thể hữu ích có một hằng số toàn cầu được khai báo với góc cạnh và có thể truy cập trong tất cả các trang. http://stackoverflow.com/a/17505414/574147 –

+0

Tôi có hoạt động tốt cho hầu hết mọi thứ. Tuy nhiên, tôi đã thêm một tham chiếu bổ sung, vì vậy tôi đang thực hiện nhập như sau: nhập {FileUploadModule} từ 'primeng/fileupload'; Mọi thứ dường như hoạt động trong Visual Studio, nhưng khi chạy nó, tôi nhận được: NHẬN http: // localhost: 59911/src/primeng/fileupload 404 (Không tìm thấy) Đây có phải là do thẻ cơ sở không? Có cách nào để có được nhập khẩu để bỏ qua các thẻ cơ sở và chỉ cần nhìn vào node_modules như nó phải không? – Mike

36

Vị trí cho href cơ bản phải có dấu /. Ví dụ:

<base href="location" /> 

sẽ không hoạt động. Nó phải ở định dạng này:

<base href="location/" /> 
+16

'' Cả hai dấu gạch chéo là cần thiết. –

+1

@VictorPiousbox Trong ứng dụng của tôi, $ cookieStore ngừng hoạt động (như đang được xóa khi tôi làm mới trang) khi sử dụng "/ location /" làm baseUrl. Sử dụng "location /" đã hoạt động. Không biết tại sao. –

+2

@yngvar, tôi giữ các ứng dụng góc cạnh của mình đằng sau proxy Apache2 thực hiện một số ghi đè url, có lẽ đó là một lý do. –

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