Tôi đang phát triển ứng dụng angular2 và tôi sử dụng bộ định tuyến. Tôi đang ở trong một trang/myapp/đăng ký. sau khi đăng ký, tôi điều hướng việc sử dụng đến/myapp/login./myapp/login cũng có thể được điều hướng từ trang chủ của tôi là/myapp. Bây giờ, khi người dùng/myapp/login tôi quay lại. Điều này có thể được thực hiện bằng cách sử dụng location.back(). Nhưng tôi không muốn quay trở lại khi người dùng đến từ/myapp/đăng ký. Vì vậy, tôi nên kiểm tra xem người dùng có đến từ/myapp/signup không và nếu có, tôi muốn chuyển nó đến một nơi khác. Làm cách nào để biết url trước đó để tôi hướng người dùng đến một trạng thái cụ thể dựa trên đó?Angular2: Cách tìm hiểu url trang trước là gì khi sử dụng định tuyến angular2
Trả lời
Bạn có thể làm điều này với document.referrer
if(document.referrer !== '/myapp/signup'){
location.back()
}
Bạn có lẽ có thể tận dụng OnActivate
phase với routerOnActivate
phương pháp cung cấp cho bạn truy cập vào địa chỉ trước đây và hiện tại.
routerOnActivate(next: ComponentInstruction, prev: ComponentInstruction) {
console.log(`Finished navigating from "${prev ? prev.urlPath : 'null'}" to "${next.urlPath}"`);
}
Nhà điều hành pairwise
cho phép để có được hiện tại cùng với giá trị trước đó
cập nhật
import 'rxjs/add/operator/pairwise';
import 'rxjs/add/operator/filter';
import {Router} from '@angular/router;
export class AppComponent {
constructor(private router: Router) {
this.router.events
.filter(e => e instanceof NavigationEnd)
.pairwise().subscribe((e) => {
console.log(e);
});
}
}
Xem thêm How to detect a route change in Angular?
gốc (siêu cũ)
Tiêm Router
và đăng ký các sự kiện và lưu trữ chúng để tham khảo sau
constructor(private _router: Router) {
this._router.subscribe(route => {
this.nextRoute ...
this.prevRoute ...
});
'_router.subscribe ...' không hoạt động trong RC4 –
Cảm ơn gợi ý! Đã cập nhật. Xem thêm http://stackoverflow.com/questions/33520043/how-to-detect-route-change-in-angular-2/38080657#38080657 –
Cách tiếp cận này giúp tôi viết lại một đường dẫn không chuẩn. Rất tiện dụng! – Jeff
import {Location} from '@angular/common';
private currentLocation;
constructor(private location: Location){
this.currentLocation = this.location.path();
}
ngAfterViewInit() {
let instance = this;
this.router.parent.subscribe(() => {
if (instance.currentLocation != instance.location.path()) {
console.log("previous -> "+instance.currentLocation+" != next -> "+instance.location.path());
}else{
console.log("previous -> "+instance.currentLocation+" == next -> "+instance.location.path());
}
});
}
Vâng, tôi sẽ làm điều đó theo cách này:
@Injectable() // do not forget to register this class as a provider
export class PreviousRouteRecorder implements CanDeactivate<any> {
constructor(private router: Router) {
}
canDeactivate(component: any): Observable<boolean> | boolean {
localStorage.setItem('previousRoute', this.router.url);
return true;
}
}
export const ROUTES: Routes = [
{
path: 'first',
component: FirstComponent,
canDeactivate: [PreviousRouteRecorder]},
{
path: 'second',
component: SecondComponent
}
];
export class SecondComponent implements OnInit {
ngOnInit(){
console.log(localStorage.getItem('previousRoute'));
}
}
Việc triển khai với hai chiều sẽ không hoạt động nếu người dùng không kích hoạt sự kiện điều hướng ít nhất hai lần và có thể gây ra một lỗi nhỏ .
trang 1 -> trang 2 ---> chuyển hướng sự kiện kích hoạt, nhưng sự kiện Quan sát chỉ có 1 giá trị và do đó cặp không phát ra ---> Người dùng không thể quay về trang 1
trang 2 -> trang 3 -> sự kiện Quan sát hiện có 2 phần tử và phát ra theo từng cặp
Tôi tự hỏi liệu có cách giải quyết khác không?
Bạn có thể đặt url trước bằng trình bảo vệ quyền tác giả và đặt url trước đó vào bất kỳ ứng dụng nào.
canActivate(route: ActivatedRouteSnapshot, snapshot: RouterStateSnapshot) {
this.commonService.prevRouter = this.router.url;
}
- 1. Biến định tuyến trong Angular2
- 2. Angular2 refresh router.navigate trang
- 3. Angular2 pathLocationChiến lược: thay đổi url khiến tải lại trang
- 4. Điều kiện áp dụng chiến lược tái sử dụng bộ định tuyến cho các tuyến angular2
- 5. Cách sử dụng vị từ trong angular2
- 6. thay thế angular.isString() trong angular2 là gì?
- 7. Truyền dữ liệu qua bộ định tuyến Angular2
- 8. Tìm trang trước Url
- 9. cú pháp ... là gì? (Tìm thấy trong Angular2)
- 10. Angular2 ổ cắm bộ định tuyến lồng nhau
- 11. Angular2 không tiêm mẫu CSS khi làm mới trang
- 12. ngrx-router so với bộ định tuyến angular2
- 13. Giao tiếp thành phần Angular2 với bộ định tuyến
- 14. Bộ định tuyến Angular2: Không thể tìm thấy ổ cắm chính để tải 'HomeComponent'
- 15. Sử dụng Proxy với TypeScript/Angular2
- 16. Sử dụng Angular2 ngFor index
- 17. Không thể tìm thấy mô-đun bên ngoài 'angular2/angular2' - Angular2 w/Typescript
- 18. 'rxjs/Subject' là gì trong Angular2?
- 19. loại nguyên cảo gì là Angular2 kiện
- 20. Cách sử dụng canvas trong Angular2?
- 21. Sử dụng angular2 với studio trực quan
- 22. AoT (hoặc biên dịch trước thời gian) trong Angular2 là gì?
- 23. Angular2 RC6 - Mô-đun lồng nhau có định tuyến
- 24. Làm cách nào để chuyển hướng đến URL bên ngoài từ tuyến đường angular2 mà không sử dụng thành phần?
- 25. Angular2 Sử dụng loại ống chỉ khi giá trị hoặc boolean nhất định là đúng
- 26. Whats đường dẫn mặc định cho các tệp tĩnh trong Angular2 là gì?
- 27. Angular2 + Jspm.io: phản xạ siêu dữ liệu được yêu cầu khi sử dụng trang trí lớp
- 28. Là angular2 mvc?
- 29. Angular2 Routing
- 30. Lấy mẩu băm từ url bằng Angular2
Không hoạt động khi tôi kiểm tra. document.referer trả về không có gì trong tất cả các trường hợp. Có lẽ nó không hành xử theo cách này khi trong angular2? – user3205675
Im sử dụng bộ định tuyến angular2.điều hướng để điều hướng đến trạng thái mới! – user3205675
Aha, vì vậy bạn không đến từ một url khác? Url không thay đổi? –