2016-07-19 17 views

Trả lời

0

Tôi đã bị mắc kẹt trên đó cùng một vấn đề chính xác. Trong trường hợp của tôi, logic canDeactivate của tôi sẽ hủy/chuyển hướng tuyến đường tiếp theo có điều kiện. Tại thời điểm này, hy vọng có một cách tốt hơn, tôi đang sử dụng các giải pháp sau đây

  1. Từ thành phần của tôi, móc vào Router sự kiện (cụ thể là RoutesRecognized) để ghi lại các tuyến đường để sử dụng sau.
  2. Triển khai canDeactivate và sử dụng dữ liệu tuyến đường đã lưu để trả lại đúng hoặc sai.

ngOnInit(): void { 
 
\t this.tabbedSearch = this.profilesService.currentProfile.tabbedSearch; 
 

 
\t this.router.events 
 
\t \t .filter(e => e instanceof RoutesRecognized) 
 
\t \t .map(e => <RoutesRecognized> e) 
 
\t \t .subscribe((e) => { 
 
\t \t \t this.lastRoute = e.state.root.firstChild.routeConfig.path; 
 
\t \t \t this.lastParams = e.state.root.firstChild.params; 
 
\t \t }); 
 
} 
 

 
public canDeactivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean { 
 
\t // do not navigate away if we are doing tabbed search AND the new route is the article details view 
 
\t if (this.tabbedSearch && this.lastRoute == "article/details/:type/:id/:version") { 
 
\t \t this.tabbedDetails.push(Object.create(this.lastParams)); 
 

 
\t \t return false; 
 
\t } 
 
\t else { 
 
\t \t return true; 
 
\t } 
 
}

(Lưu ý: Bạn không thể chạy đoạn nhưng đối với một số lý do định dạng Mã mẫu đã không được hoàn trả đúng.)

Tôi thực sự, thực sự không thích điều này nhưng không tìm thấy bất kỳ cách nào khác.

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