我在它们的函数(分别为“ editForm”和“ deleteForm”)中编写了PUT和DELETE方法。
我想在每个请求成功完成后显示setAlert()
功能。因此,我使用了.then()
方法,它在editForm
函数内部完美运行,如下所示。
但是当我对deleteForm
执行相同操作时,.then()
方法不起作用,因为
它说:“属性'then'在'Subscription'类型上不存在”。那我该如何解决呢?
这是我的component.ts文件:
import { Component, OnInit, OnDestroy } from '@angular/core';
import { ActivatedRoute, Router } from '@angular/router';
import { FormService } from './forms.service';
import { HttpClient } from '@angular/common/http';
import { alert } from './alert';
@Component({
selector: 'app-forms',
templateUrl: './forms.component.html',
styleUrls: ['./forms.component.css']
})
export class FormsComponent implements OnInit {
alert: alert;
id: any;
posts: any;
constructor(public formService: FormService ,private route: ActivatedRoute,
private router: Router, private http: HttpClient) { }
ngOnInit() {
this.id=this.route.snapshot.params['id'];
this.alert = new alert();
this.posts = this.formService.getForms(this.id).subscribe(
(forms: any) => {
this.formService.form = forms[0];
}
);
}
editPost() {
this.formService.editForm().then((res:any) => {
this.formService.alert.setAlert("Post has been successfully saved !");
})
}
deletePost() {
this.formService.deleteForm().subscribe(
data => {
console.log("DELETE Request is successful ", data);
},
error => {
console.log("Error", error);
}
).then(() => {
this.formService.alert.setAlert("Post has been successfully deleted !");
})
}
}
这是我的service.ts文件:
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { form } from './form-interface';
import { alert } from './alert';
@Injectable({
providedIn: 'root'
})
export class FormService {
formsUrl = "https://jsonplaceholder.typicode.com/posts";
form: form = {
id: 0,
userId: 0,
title: '',
body: ''
};
alert: alert;
constructor(private http: HttpClient) {
this.alert = new alert();
}
getForms(id) {
return this.http.get('https://jsonplaceholder.typicode.com/posts'
+ "?id=" + id)
}
editForm() {
return fetch(this.formsUrl + "/" + this.form.id, {
method: 'PUT',
body: JSON.stringify(this.form),
headers: {
"Content-type": "application/json; charset=UTF-8"
}
})
.then(response => response.json())
}
deleteForm() {
return this.http.delete(this.formsUrl + "/" + this.form.id);
}
}
答案 0 :(得分:0)
因为http返回的是可观察的而不是承诺。在此处使用.subscribe。它将解决您的问题
答案 1 :(得分:0)
editform
方法使用JavaScript fetch
api调用服务,该服务返回诺言,因此then
方法在此处工作。在deleteForm
方法中,您正在使用角度HttpClient
进行服务呼叫,该呼叫返回可观察的状态。而不是使用then
,而应使用subscribe
方法
deleteForm() {
return this.http.delete(this.formsUrl + "/" + this.form.id);
}
在您的component.ts
中 deletePost() {
this.formService.deleteForm().subscribe(
data => {
console.log("DELETE Request is successful ", data);
this.formService.alert.setAlert("Post has been successfully deleted !");
},
error => {
console.log("Error", error);
}
)
}
答案 2 :(得分:0)
在subscribe方法中获得响应并向其调用警报时,可以使用message获得正确的响应 像下面一样
deletePost() {
this.formService.deleteForm().subscribe(
data => {
console.log("DELETE Request is successful ", data);
this.formService.alert.setAlert("Post has been successfully deleted !");
},
error => {
console.log("Error", error);
}
))
}