我要完成的工作是,当我从PageTwo导航到PageOne时,它将触发方法addSomthing(){}。但我不想在从PageThree导航时触发该方法。
有一种方法可以使用@ angular / router中的NavigationExtras来完成此操作。
.ts
goToPageOne(passed_number: string) {
let navigationExtras: NavigationExtras = {
state: {
severityNumberPass: passed_number
// add something to fire method addSomething
}
};
this.router.navigate(['/PageOne'], navigationExtras);
}
答案 0 :(得分:1)
有两种方法可以实现此目的,但是根据您提供的简短说明,我将使用CanDeactivate
或CanActivate
方法
这两个都是您在angular上实现为服务并为它们设置路由器级别的接口:
interface CanActivate {
canActivate(route: ActivatedRouteSnapshot
, state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean
}
实现方式:
@Injectable({
providedIn: 'root',
})
export class SomeServiceGuard implements CanActivate {
canActivate(
next: ActivatedRouteSnapshot,
state: RouterStateSnapshot): boolean {
//--> someMethod() could be invoked here
console.log('Some validation can go here #canActivate called');
return true;
}
}
在路由中,其配置方式类似于
export const ROUTES: Routes = [
{ path: '', component: AppComponent },
{
path: 'other',
component: OtherComponent,
canActivate: [SomeServiceGuard] //<--- here
},