Проблема заключается в том, что размещение содержимого в БД является задачей Asyn c. В тот момент, когда вы переходите на другой путь, функция обратного вызова для подписки http post еще не была вызвана. Таким образом, в точке навигации this.isSaved
не определено.
Попробуйте подождать, пока не будет выполнена функция обратного вызова. Например, перейдите в самой функции обратного вызова.
По моему мнению, есть возможные пути: .post
возвращает наблюдаемую, так что вы можете вернуть эту наблюдаемую в updatePassword
и подписаться в компоненте.
Служба:
public updatePassword(newPass: string) {
// [...]
return this.httpClient.post(this.URL_UPDATE_PASSWORD, { newPassword });
}
Компонент:
// [...]
this.Service.updatePassword(this.neuesPassword).subscribe((response) => {
this.router.navigateByUrl('/url',{ queryParams: { response: response } });
});
На мой взгляд, лучший способ - преобразовать наблюдаемое в обещание с помощью toPromise
, тогда вы можете вернуть это обещать и разрешить это в компоненте.
Служба:
public updatePassword(newPass: string) {
// [...]
return this.httpClient.post(this.URL_UPDATE_PASSWORD, { newPassword }).toPromise();
}
Компонент:
// [...]
this.Service.updatePassword(this.neuesPassword).then((response) => {
this.router.navigateByUrl('/url',{ queryParams: { response: response } });
});
В обоих случаях я бы порекомендовал прочитать об asyn c await, обещаниях и наблюдаемых.