我正在尝试使用httpClient
中的Angular
进行API调用。这是我进行api调用的代码。
这是我在httpPost
中的authService
方法:
this.authService.httpPost("/api/Users/requestNew", payload).subscribe(
(data) => {
console.log(data);
this.inputForm.reset();
},
(error) => {
let errorMessage = "Ooooops. An error occured. Please refresh and try again.";
}
);
auth.service.ts
constructor(
private http: HttpClient,
private dataService: DataService
) {}
httpPost(url, payload) {
return this.http.post(
this.url_base + ":" + this.port + url,
payload, {
headers: new HttpHeaders({
"Content-Type": "application/json",
Authorization: localStorage.getItem("id_token")
})
}
);
}
现在,在有效负载中,我故意丢失了一个字段,结果服务器抛出了错误。这是我从服务器收到的错误:
http://192.168.0.15:3000/api/Users/requestNew 450 (unknown)
来自服务器的响应:
{"error":{"statusCode":"450","message":"Duration is not set.","code":"MISSING_FIELD"}}
现在我面临的问题是我的页面会自动刷新。这是我的原始网址:http://localhost:4200/user/new
,在api调用后,页面将使用新的网址http://localhost:4200/user/new?
进行刷新。正在添加一个额外的问号,但我不确定为什么页面会刷新。不应该刷新它,因为我在逻辑中没有写过。
修改
我有一个formGroup
inputForm: FormGroup;
durationsControl: FormControl = new FormControl(null, [
Validators.required
]);
ngOnInit(){
this.inputForm = new FormGroup({
duration: this.durationsControl,
//more controls
});
}
在更改下拉菜单时,我正在删除此控件:
valueCHanged(e) {
const type = e.value;
if (type === "One") {
this.durationDiv.nativeElement.style.display = "none";
this.inputForm.removeControl("duration");
} else {
this.durationDiv.nativeElement.style.display = "block";
this.inputForm.addControl("duration", this.durationsControl);
}
}
如果我不删除持续时间控件(this.inputForm.removeControl("duration");)
,则它可以正常工作。此更改如何导致页面刷新?
编辑1
我从duration
中删除了ngOnInit()
控件:
ngOnInit(){
this.inputForm = new FormGroup({
// duration: this.durationsControl, ---> removed this
//more controls
});
}
现在它可以正常工作,并且页面没有刷新。但是我仍然无法弄清楚原因。