Попробуйте вместо этого вернуть Observable<boolean>
. Это можно сделать с помощью таких операторов, как Rx JS map. В любом случае, в таких средствах защиты, как CanDeactivate или CanActivate, в основном вы никогда бы не использовали subscribe()
, поскольку вы не можете ничего вернуть из subscribe()
и вместо этого вернуть Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree
:
import { map } from 'rxjs/operators';
@Injectable()
export class CanDeactivateGuard implements CanDeactivate<Component> {
canDeactivate(component: Component): Observable<boolean> | boolean {
if (component.formValueChanged) {
// Return the observable instead of the subscription
return component.confirmService.confirm("You have unsaved data. Are you sure?")
.pipe(first())
// You may be able to remove map() assuming confirm() always returns Observable<boolean>
.map((confirmed: boolean) => confirmed);
}
return false;
}
}