Angular4 能够检查以前的路线
Angular4 Ability to check for previous route
我正在尝试控制组件流 - 有些组件不能直接访问,即必须来自以前的组件。
例如,必须先完成并验证 OrderDetails 组件,然后才能访问付款组件。
无法阻止用户输入 "localhost:xxxxx/#/PaymentDetails"
如何检查用户来自 OrderDetails 组件并完成了表单?
我在下面的 PaymentDetails 组件中尝试过但不起作用。
非常感谢任何帮助指导。
this.router.events
.filter(e => e instanceof RoutesRecognized)
.pairwise()
.subscribe((event: any[]) => {
console.log(event[0].urlAfterRedirects);
console.log(event[0]);
alert("PREVIOUS" +event[0].urlAfterRedirects);
});
this.router.events
.filter(event => event instanceof NavigationStart)
.pairwise()
.subscribe((value: [NavigationEnd, NavigationEnd]) => {
let previousUrl = value[0].url;
let nextUrl = value[1].url;
console.log(value);
alert("PR" + previousUrl);
alert("CR" + nextUrl);
});
您可以使用 CanActivate Routeguard 来处理到您的 PaymentDetailComponent 的有效路由。组件可以通过服务进行通信,并且该服务拥有一个状态,该状态必须为真才能成功路由到 PaymentDetailsComponent。
有关详细信息,请查看 angular documentation
import { Injectable } from '@angular/core';
import { CanActivate, Router } from '@angular/router';
import { OrderDetailService } from './path/to/OrderDetailService';
@Injectable()
export class PaymentDetailsGuard implements CanActivate {
constructor(private ods: OrderDetailService,
private router: Router) {}
canActivate() {
// Check here if OrderDetailService holds valid data, e.g valid form
// otherwise navigate the user to your OrderDetailComponent
if (this.ods.validToProceedToPaymentDetails) {
return true
} else {
this.router.navigate(['/orderDetail'])
return false
}
}
}
这是另一个选项。
在 PaymentComponent 中,创建一个 Input 字段,并注入一个 Router
@Input('ok') private _ok: string
//------------------------------------------------------------//
constructor(private _router: Router) {
super();
}//ctor
//------------------------------------------------------------//
ngOnInit() {
if (!this._ok)
this._router.navigate(['/home'])
}//ngOnInit
按顺序-details.html这样做。
<app-payment *ngIf="_goToPayment" [ok]="'ok'"></app-payment>
如果从 OrderDetailsComponent 以外的任何其他方式访问 PaymentComponent,则字段
this._ok==undefined
我正在尝试控制组件流 - 有些组件不能直接访问,即必须来自以前的组件。 例如,必须先完成并验证 OrderDetails 组件,然后才能访问付款组件。
无法阻止用户输入 "localhost:xxxxx/#/PaymentDetails"
如何检查用户来自 OrderDetails 组件并完成了表单? 我在下面的 PaymentDetails 组件中尝试过但不起作用。
非常感谢任何帮助指导。
this.router.events
.filter(e => e instanceof RoutesRecognized)
.pairwise()
.subscribe((event: any[]) => {
console.log(event[0].urlAfterRedirects);
console.log(event[0]);
alert("PREVIOUS" +event[0].urlAfterRedirects);
});
this.router.events
.filter(event => event instanceof NavigationStart)
.pairwise()
.subscribe((value: [NavigationEnd, NavigationEnd]) => {
let previousUrl = value[0].url;
let nextUrl = value[1].url;
console.log(value);
alert("PR" + previousUrl);
alert("CR" + nextUrl);
});
您可以使用 CanActivate Routeguard 来处理到您的 PaymentDetailComponent 的有效路由。组件可以通过服务进行通信,并且该服务拥有一个状态,该状态必须为真才能成功路由到 PaymentDetailsComponent。
有关详细信息,请查看 angular documentation
import { Injectable } from '@angular/core';
import { CanActivate, Router } from '@angular/router';
import { OrderDetailService } from './path/to/OrderDetailService';
@Injectable()
export class PaymentDetailsGuard implements CanActivate {
constructor(private ods: OrderDetailService,
private router: Router) {}
canActivate() {
// Check here if OrderDetailService holds valid data, e.g valid form
// otherwise navigate the user to your OrderDetailComponent
if (this.ods.validToProceedToPaymentDetails) {
return true
} else {
this.router.navigate(['/orderDetail'])
return false
}
}
}
这是另一个选项。 在 PaymentComponent 中,创建一个 Input 字段,并注入一个 Router
@Input('ok') private _ok: string
//------------------------------------------------------------//
constructor(private _router: Router) {
super();
}//ctor
//------------------------------------------------------------//
ngOnInit() {
if (!this._ok)
this._router.navigate(['/home'])
}//ngOnInit
按顺序-details.html这样做。
<app-payment *ngIf="_goToPayment" [ok]="'ok'"></app-payment>
如果从 OrderDetailsComponent 以外的任何其他方式访问 PaymentComponent,则字段
this._ok==undefined