2016-05-04 19 views
5

Trong khi sử dụng HashLocationStrategy Tôi có thể thay đổi tuyến đường bằng cách thay đổi địa chỉ trong thanh địa chỉ của trình duyệt bằng tay mà không cần tải lại trang. I E. điều hướng từ mysite/#/home đến mysite/#/profileAngular2 pathLocationChiến lược: thay đổi url khiến tải lại trang

Tuy nhiên, nếu tôi sử dụng PathLocationStrategy (đó là chiến lược vị trí mặc định), tôi có tải lại trang không mong muốn, khi tôi cố gắng làm điều tương tự. I E. điều hướng từ mysite/home đến mysite/profile

Có thể sửa lỗi này không?

Tôi đang sử dụng Angular 2.0.0-beta17

+1

Khó nói mà không thấy những gì bạn đang thực sự làm. Làm cách nào để thay đổi tuyến đường? –

+0

Tôi thay đổi nó theo cách thủ công trong thanh địa chỉ của trình duyệt. I E. khi tôi thay đổi 'mysite/#/home' thành' mysite/#/profile' bằng cách sử dụng chiến lược vị trí băm, nó thay đổi tuyến đường và không tải lại toàn bộ trang; sau đó, khi tôi chuyển chiến lược vị trí của ứng dụng thành PathLocationStrategy và cố gắng thay đổi 'mysite/home' thành' mysite/profile', nó sẽ làm mới trang không mong muốn. –

+0

Tôi đã cập nhật câu hỏi của mình cho phù hợp, cụ thể hơn –

Trả lời

5

Đó là "như được thiết kế". Khi bạn chỉ thay đổi #... thì không có gì để gửi đến máy chủ. Phần #... luôn được xử lý bởi trình duyệt và không bao giờ được gửi đến máy chủ.

Khi bạn thay đổi một phần trước # và nếu bạn không có # hơn mọi thứ là trước- # -part thì trình duyệt cần thực hiện yêu cầu mới cho máy chủ để tìm nạp URL.

Nếu bạn sử dụng window.history... API (https://developer.mozilla.org/en-US/docs/Web/API/History_API) thì bạn yêu cầu trình duyệt chỉ cập nhật thanh URL nhưng không gọi ra máy chủ. Bộ định tuyến góc sử dụng API này do đó điều này hoạt động từ bên trong ứng dụng hoặc khi bạn sử dụng nút quay lại hoặc tiến nhưng không phải khi bạn thay đổi URL theo cách thủ công.

2

Nếu bạn muốn sử dụng đường dẫn HTML5 (PathLocationStrategy) mà không có sự NG2 trang làm mới về biến đổi tuyến đường, bạn phải sử dụng các chỉ thị routerLink, ví dụ:

<a [routerLink]="['/my-page']">My Page</a> 
<a [routerLink]="['/my-other-page']">My Other Page</a> 

Tại nhập khẩu @NgModule init:

RouterModule.forRoot([ 
    {path: '',    component: DefaultComponent}, 
    {path: 'my-page',  component: MyPageComponent}, 
    {path: 'my-other-page', component: MyOtherPageComponent} 
]); 
+0

Đây thực sự là câu trả lời đúng, tải đẹp! – jemiloii

+1

@jemiloii Điều đó không trả lời được câu hỏi. Sử dụng routerLink hoạt động nếu người dùng nhấp vào các liên kết đó, nhưng nếu người dùng thay đổi địa chỉ trong thanh địa chỉ từ 'my-page' thành' my-other-page' và nhấn Enter, trang sẽ vẫn tải lại – Ryan

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