I solved it. I created a shared service:
@Injectable()
export class MenuFormService {
private menuFormAnounceClickSubject = new Subject();
private menuFormConfirmationSavedSubject = new Subject<boolean>();
menuFormAnounceClick$ = this.menuFormAnounceClickSubject.asObservable();
menuFormConfirmationSaved$ = this.menuFormConfirmationSavedSubject.asObservable();
anounceClickMenuForm() {
this.menuFormAnounceClickSubject.next();
}
confirmSaveMenuForm(saved: boolean) {
this.menuFormConfirmationSavedSubject.next(saved);
}
}
In the menu component:
export class MenuComponent implements OnInit {
currentRouteItemMenu: string;
constructor(
private menuFormService: MenuFormService,
private router: Router
) {}
ngOnInit(): void {
this.menuFormService.menuFormConfirmationSaved$.subscribe(
saved => {
if (saved) {
this.router.navigate([this.rutaItemActual]);
}
});
}
onClick(currentRouteItemMenu: string): void {
this.currentRouteItemMenu = currentRouteItemMenu;
this.menuFormService.anounceClickMenuForm();
}
}
In every component with forms:
export class NComponent implements OnInit, OnDestroy {
subscription: Subscription;
constructor(
private menuFormService: MenuFormService
) {}
ngOnInit(): void {
this.subscription = this.menuFormService.menuFormAnounceClick$.subscribe(
response => {
if (this.form.valid) {
this.menuFormService.confirmSaveMenuForm(true);
} else {
this.menuFormService.confirmSaveMenuForm(false);
}
});
ngOnDestroy(): void {
this.subscription.unsubscribe();
}
}