2015-12-31 20 views
13

Cú pháp hoàn toàn mới này có vẻ tốt và bây giờ tôi đang nghĩ nó thực sự là. Tôi đã từ bỏ cố gắng để làm cho nó hoạt động và ở đây tôi nhận thấy rằng thậm chí không phải là ví dụ chính trong trang Angular 2 hoạt động. Nếu bạn mở ví dụ trực tiếp và bạn thử nó chỉ cần nhấp vào nó hoạt động mát mẻ và bạn có thể thấy đường dẫn trong url được thay đổi, nhưng nó chỉ thay đổi chuỗi đường dẫn không thực sự tồn tại, nếu bạn sao chép url của bạn và gửi nó với ai đó, họ sẽ gặp phải lỗi sau:Router của Angular 2 có bị hỏng khi sử dụng các tuyến HTML5 không?

{ 
    "statusCode": 404, 
    "error": "Not Found" 
} 

Địa ngục ngay cả khi bạn vừa mới làm mới trang, bạn sẽ gặp lỗi tương tự.

Nếu bạn muốn tạo lại vấn đề mở URL này:

https://angular.io/resources/live-examples/tutorial/ts/plnkr.html

Nhấp vào "Khởi động xem trước trong một cửa sổ riêng biệt" nút ở phía trên bên phải của xem trước sống, chờ đợi cho nó để tải trang và khi bạn thấy URL thay đổi một cái gì đó như:

http://run.plnkr.co/KMzM8hkaCyhlnf3b/dashboard

làm một F5 để làm mới trang và bạn sẽ nhận được lỗi.

Đây có phải là lỗi, cách thức hoạt động của nó, hoặc điều gì đó mà họ thậm chí không thử? Có phải họ đã bắt đầu một lần nữa với việc triển khai bộ định tuyến không tốt hay tôi hoàn toàn bị mất về cách tôi đang cố gắng làm cho nó hoạt động? Làm ơn cho lời khuyên !

Tôi đoán tôi nên sử dụng tính năng triển khai thẻ bắt đầu bằng #.

Trả lời

13

Thực tế, bạn gặp lỗi 404 khi tải lên ứng dụng vì địa chỉ thực trong trình duyệt đang cập nhật (và không có phương pháp #/hashbang). Theo mặc định, lịch sử HTML5 được sử dụng để sử dụng lại trong Angular2.

Nếu bạn không muốn gặp lỗi 404, bạn cần phải cập nhật máy chủ của mình để phục vụ tệp index.html cho từng tuyến đường.

Liên kết này có thể giúp bạn: When I refresh my website I get a 404. This is with Angular2 and firebase.

Hy vọng nó giúp bạn, Thierry

+0

Tôi không hiểu tại sao nó xảy ra, đó là lý do tại sao tôi nghĩ rằng nó quá tốt là đúng. Những gì tôi đã không cam kết là mục đích của việc sử dụng nó theo cách đó và thậm chí tệ hơn là, mặc định các chức năng trong chế độ đó là gì.Chuyển hướng đến chỉ mục có thể có ý nghĩa NẾU ứng dụng của bạn không phải là phía máy khách và vì vẻ ngoài của nó, cách tiếp cận mới nhất cho các ứng dụng nhanh sử dụng bộ khung này không triển khai chương trình phụ trợ, chúng chỉ tiêu thụ các dịch vụ. Tôi chưa có phụ trợ. Tuy nhiên đó là trường hợp sử dụng/kịch bản hợp lệ. Tôi sẽ thử nó và nếu nó hoạt động tôi sẽ chấp nhận câu trả lời của bạn, cảm ơn bạn =) – Langley

+0

Yea có vẻ như bạn có thể làm cho nó hoạt động theo một kịch bản và cấu hình cụ thể mà họ không bao giờ chỉ định. Tôi vẫn không nghĩ đó là hành vi mặc định hoặc ít nhất họ cũng nên nói cho bạn biết về vấn đề này. Cảm ơn sự giúp đỡ Sr.! Điều này cũng đã giúp: http://stackoverflow.com/questions/31415052/angular-2-0-router-not-working-on-reloading-the-browser – Langley

+1

@Langley FYI, đây vẫn là vấn đề mở trong thảo luận trong repo 'angular2'. https://github.com/angular/angular/issues/4735. Tức là 'HashLocationStrategy' là một hack cần thiết trước khi các trình duyệt bao gồm hỗ trợ HTML5' history.pushState() '. 'PathLocationStrategy' là cách tiếp cận chính xác, nhưng chúng ta cần các công cụ tốt hơn để giúp các nhà phát triển front-end không có nhiều kiến ​​thức back-end được bắt đầu. –

1

Như được thiết kế (bởi HTML5 không được giới thiệu bởi Góc). Hoặc chuyển sang HashLocationStrategy hoặc sử dụng một máy chủ biết cách xử lý (chuyển hướng) các yêu cầu như vậy. Xem thêm https://github.com/angular/angular/issues/4735

+1

Router được tạo ra bởi góc, và họ mặc định các chức năng của nó trong một cách đó là lỗi mà không cần nhiều lời giải thích về vấn đề này. Điều đó không liên quan gì đến HTML5 khi thêm phương thức mà họ đang sử dụng. – Langley

+1

Tài liệu tốt hơn luôn luôn là một điều tốt, nhưng điều này là do thiết kế của HTML5 và là ** không ** Góc cụ thể. Nó sẽ là vô nghĩa đối với Angular để thêm tất cả các tài liệu MDN. –

+0

Thực tế là các trình duyệt thực hiện chức năng đó dựa trên thông số HTML không có gì để làm với một Khung sử dụng nó và thậm chí nhiều hơn đề xuất sử dụng nó một cách không chính xác. – Langley

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