从页面导航到其他任何路线时,我都想执行发布请求。
我试过使用:
this.subscriptionGrade = router.events
.pipe(filter((event) => event instanceof NavigationStart))
.pipe(
concatMap(() => {
return this.submitScore();
})
)
.subscribe((res) => {
this.snackBar.openSnackBar("Score submitted", "");
});
submitScore() {
const score = { score: this.scoreForm.get("score").value };
if (this.scoreForm.get("score").value) {
return this.learningContentService.gradeAssignment(
this.selectedAttempt,
score
);
} else {
return of(null);
}
}
这将执行http reuquest,但在从http请求接收到响应并且请求被取消之前,切换到下一个路由。
您可以在此路由上使用canDeactivate并检查http调用是否成功。
export interface CanComponentDeactivate {
canDeactivate: () => Observable<boolean> | Promise<boolean> | boolean;
}
...
@Injectable()
class CanDeactivateComponent implements CanDeactivate<CanComponentDeactivate>{
constructor() {}
canDeactivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> {
let data= route.data.data;
return this.service.post(url, data)
.pipe(
map(response => response.status === 'success'),
catchError(error => of(false))
);
}
}
你的路线
{
path: 'yourRoute',
component: Component,
canActivate: [CanDeactivateComponent ],
data: { data: {...}}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句