Как отписаться от post запроса Angular?
У меня есть простой post запрос, который я использую для создания сообщений. Проблема в том, что функция sendMessage() будет работать абсолютно одинаково всегда после ее первого вызова, отправляя одно и то же сообщение в БД даже после того, как я изменю его текст, пока не пересоздам таблицу. Обновление странички ничего не дает, так что проблема видимо в запросе. Я пытался отписаться от запроса сразу же после его выполнения, но в таком случае сообщение даже не появляется в БД. Я также хотел использовать Observer.complete() или что-то в этом роде, но понятия не имею, как использовать лямбда-выражение не в новом Observable, а в методе create().
Буду признателен за любую помощь. В ангуляре новичок.
Сервис
@Injectable({
providedIn: 'root',
})
export class MessageService {
private url = environment.apiUrl + '/message';
constructor(private http: HttpClient) {}
public create(request: CreateMessageRequest): Observable<void> {
return this.http.post<void>(this.url, request);
}
}
функция
public sendMessage(message: string){
let request: CreateMessageRequest = {
Message: message,
}
const req = this.messageService.create(request).subscribe();
//req.unsubscribe();
}
HTML
<form>
<textarea #refVariable [value]="test" type="text" placeholder="Write message"></textarea>
<button class="buttonTwo" type="submit" (click)="sendMessage(refVariable.value)"></button>
</form>
P.S.: был также попробован такой код, но с идентичным результатом
TS
export class DialogsComponent implements OnInit, OnDestroy {
constructor(private messageService: MessageService){}
private unsubscribe$ = new Subject<void>();
ngOnDestroy(): void {
this.unsubscribe$.next();
this.unsubscribe$.complete();
}
public sendMessage(message: string){
let request:
Message: message,
}
this.messageService.create(request)
.pipe(takeUntil(this.unsubscribe$))
.subscribe();
}
}
P.P.S.: Не знаю, насколько это имеет значение, но после выполнения кода функции в network отображается Request Method: OPTIONS 204 No Content и Request Method: POST 200 OK.