Мне нужно удалить любой объект из моей DRF / django подключенной базы данных через angular 13
Я получаю идентификатор, который мне нужно удалить, но последняя строка service.ts, которая является методом удаления, не выполняется...
Файлы и фрагменты кода, которые я использовал, следующие: -
COMPONENT.HTML
<li *ngFor="let source of sources$ | async | filter: filterTerm">
<div class="card">
<div class="card-body">
<h5 class="card-title">{{source.name}}</h5>
<p>URL:- <a href ='{{source.url}}'>{{source.url}}</a></p>
<a class="btn btn-primary" href='fetch/{{source.id}}' role="button">fetch</a>
<button class="btn btn-primary" (click)="deleteSource(source.id)">delete </button>
<br>
</div>
</div>
</li>
Я попытался консолидировать получение id из html и Id, который я получаю, правильный. //component.ts
export class SourcesComponent implements OnInit {
filterTerm!: string;
sources$ !: Observable<sources[]>;
// deletedSource !: sources;
constructor(private sourcesService: SourcesService) { }
// prepareDeleteSource(deleteSource: sources){
// this.deletedSource = deleteSource;
// }
ngOnInit(): void {
this.Source();
}
Source(){
this.sources$ = this.sourcesService.Sources()
}
deleteSource(id : string){
console.log(id)
this.sourcesService.deleteSource(id);
}
//service.ts
export class SourcesService {
API_URL = 'http://127.0.0.1:8000/sourceapi';
constructor(private http: HttpClient) { }
// let csrf = this._cookieService.get("csrftoken");
// if (typeof(csrf) === 'undefined') {
// csrf = '';
// }
/** GET sources from the server */
Sources() : Observable<sources[]> {
return this.http.get<sources[]>(this.API_URL,);
}
/** POST: add a new source to the server */
addSource(source : sources[]): Observable<sources[]>{
return this.http.post<sources[]> (this.API_URL, source);
//console.log(user);
}
deleteSource(id: string): Observable<number>{
let httpheaders=new HttpHeaders()
.set('Content-type','application/Json');
let options={
headers:httpheaders
};
console.log(id)
return this.http.delete<number>(this.API_URL +'/'+id)
}
}
Функции
Вернуться на верх
Angular HTTP возвращают холодные наблюдаемые. Это означает, что this.http.delete<number>(this.API_URL +'/'+id)
будет возвращать наблюдаемую, которая ничего не будет делать, пока кто-нибудь не подпишется на нее. Таким образом, не будет выполнен ни один HTTP-вызов, поскольку никто не будет наблюдать за результатом.
Если вы не хотите использовать результат этого вызова, у вас есть различные варианты запуска подписки.
- просто вызовите subscribe на наблюдаемой:
deleteSource(id : string){
console.log(id)
this.sourcesService.deleteSource(id).subscribe();
}
- Преобразуйте его в обещание и ожидайте его (или не ожидайте, если это не нужно), используя
lastValueFrom
:
async deleteSource(id : string){
console.log(id)
await lastValueFrom(this.sourcesService.deleteSource(id));
}