从特定页面导航到时如何激活 angular 方法
how do I activate an angular method when navigated to from a specific page
我想要完成的是,当我从 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);
}
有几种方法可以实现这一点,但根据您提供的简要说明,我会使用 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
},
我想要完成的是,当我从 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);
}
有几种方法可以实现这一点,但根据您提供的简要说明,我会使用 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
},