2016-09-05 29 views
5

Tôi đã nâng cấp Angular 2 từ việc sử dụng bộ định tuyến được đánh dấu "depricated" và bắt đầu sử dụng bộ định tuyến "mới" trong rc5 và rc6. Tuy nhiên bây giờ tôi đang gặp vấn đề (bắt đầu trong rc5 và vẫn giống nhau trong rc6), nơi có một thành phần cần điều hướng đến cùng một thành phần nhưng với các tham số khác nhau (để tìm nạp dữ liệu khác thì dữ liệu đó có trong khung nhìn allready, based trên các tham số).Góc 2 tuyến đến cùng một thành phần

Trong bộ định tuyến bị hỏng, hàm tạo và AfterViewInit, vv được gọi mỗi lần khi điều hướng vào thành phần với this.router.navigate. Trong bộ định tuyến mới, hàm tạo và những thứ khác không được gọi khi gọi cùng một thành phần đó lại với nhau. Vì vậy, tôi đoán có một số loại "ma thuật"/bộ nhớ đệm xảy ra. Cũng lưu ý rằng thành phần tôi gửi một tham số bắt buộc và một vài tham số tùy chọn để liên kết trông giống như sau: http://localhost:2222/mycomponent/1;someotherparam=123

Có cách nào để buộc thành phần được tạo mỗi khi điều hướng đến nó không?

+0

Không phải là câu trả lời tuyệt vời, nhưng tôi không chắc chắn bạn đang sử dụng ng2 chính xác. Bạn không nên định tuyến đến cùng một thành phần với các URL khác nhau. Sử dụng các thay đổi trạng thái nội bộ để thao tác thành phần của bạn. Nếu bạn chỉ cần URL thay đổi, hãy xem câu trả lời này: http://stackoverflow.com/questions/35618463/change-route-params-without-reloading-in-angular-2/39322473#39322473 –

+0

Tôi phải nhấn mạnh rằng mã điều hướng vì nó hiện đang hoạt động trên bộ định tuyến cũ, hiện đã bị xóa/xóa. Nó hoạt động trong một thời gian dài thông qua nhiều phiên bản của Angular 2, nhưng vấn đề là với router mới. Tôi cần cho nó để có thể điều hướng qua lại cũng với nút quay lại/chuyển tiếp và dữ liệu chính xác được nạp dựa trên các thông số url. Chỉ cần thay đổi URL không hoạt động tốt cho tôi trong tình huống của tôi (đặc biệt khi người dùng nhấp vào nút quay lại/tiến, dữ liệu cần được tải lại cho thành phần). – alexsoftware

+1

Tôi bây giờ tin rằng đây là một lỗi với bộ định tuyến góc 2. Khi một tuyến mới (ngay cả khi cùng một thành phần) thành phần sẽ được xây dựng lại. Tôi đã giải quyết vấn đề này bằng cách thêm phần này vào hàm tạo của thành phần: router.events.subscribe ((sự kiện: Sự kiện) => { nếu (trường hợp sự kiện của NavigationEnd) {// Tải dữ liệu dựa trên tham số trong ActivatedRoute}}) ; Điều này sẽ giúp bạn có thể nhận khi tuyến đường thay đổi và tải dữ liệu dựa trên đó. – alexsoftware

Trả lời

5

Hãy nhìn vào các Rangle.io guide cho góc 2.

Cụ thể phần trên Reading Route thông số

Lý do mà tài sản params trên ActivatedRoute là một Quan sát là các bộ định tuyến có thể không tạo lại thành phần khi điều hướng đến cùng một thành phần. Trong trường hợp này tham số có thể thay đổi mà không có thành phần được tạo lại.

Vì vậy, thành phần của bạn sẽ không được tái tạo nhưng bạn có thể đăng ký thay đổi trong các bộ phận của con đường mà bạn đang quan tâm (params, data, fragment, queryParams) và gọi những phương pháp khởi tạo như subscribe() callback của bạn.

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