#json #angular #post #request
#json #angular #Публикация #запрос
Вопрос:
Я делаю http-сообщение с заголовком. После этого сообщения я перехожу к списку клиентов и хочу показать SuccesMessage, что запись включена. Как я могу отобразить сообщение на другом маршруте? Вот мой код:
postData({
let url = "api.url"
var header = new HttpHeaders .... // etc.
this.http.post(url, { company: this.form.value.company }, { headers (header)}).toPromise().then((data: any) => { console.group(data) })
После отправки маршрута на страницу отображается сообщение:
this.router.navigate(['customer']);
this.showMsg = true;
Вот мой html
<div *ngIf="showMsg">Success</div>
Но сообщение об успешном завершении не отображается. Почему? И что я должен делать? Большое вам спасибо за помощь!
Ответ №1:
Вам необходимо использовать объект совместного использования данных, такой как сервис. Например, у вас может быть служба, содержащая это:
private msgSubject: BehaviorSubject<void> = new BehaviorSubject<void>(void 0);
public msg$: Observable<void> = this.msgSubject.asObservable();
showMsg(): void {
this.msgSubject.next();
}
затем в компоненте, к которому вы переходите после перенаправления, вам просто нужно внедрить сервис, а затем подписаться на наблюдаемый msg$
:
this.msgService.msg$.subscribe(() => (this.showMsg = true));
Вам также нужно будет вызвать showMsg
метод службы, как только ваш post будет успешным.
Комментарии:
1. Привет, Тим, большое тебе спасибо! Я пробовал код, но у меня возникли некоторые проблемы. Можете ли вы прислать мне немного больше помощи? На данный момент я создал имя службы «friends.service.ts». Как мне получить BehaviorSubject ? Было бы здорово, если бы вы могли прислать мне более подробную информацию об использовании.
2. в обоих компонентах, в том, который перед маршрутизацией, и в компоненте, к которому вы переходите, вы введете службу в конструктор: private friendsService: FriendsService. Затем в ngOnInit компонента, к которому вы переходите, вы подписываетесь на наблюдаемый msg $. В компоненте, где вы публикуете, где у вас есть router.navigate, вы добавляете this.friendsService.showMsg(). это вызовет подписку и покажет сообщение на вашем втором компоненте