#angular #httpclient
#angular #httpclient
Вопрос:
Я могу утешать.запишите ответ метода POST. Но я хочу сохранить этот ответ в переменной, чтобы использовать его в дальнейшем в коде. Пожалуйста, помогите.
вызов метода post отправляет объект в качестве ответа.
student.ts (Student — это класс, который совпадает с объектом, полученным из запроса post.)
export class Student {
ID : number;
firstName : string;
}
метод component.ts (on submit) вызывается при отправке формы. this.student выдает вывод как неопределенный)
public student : Student[];
onSubmit() {
this._studentService.addData(this.addStudentForm.value)
.subscribe( response => console.log("respnse", response),
);
console.log(this.student);
}
service.ts
addData(studentData) : Observable<any> {
return this.http.post<any>(this._url, studentData);
}
Когда я пытаюсь сохранить ответ в переменной, я получаю вывод как неопределенный.
Как я могу сохранить ответ в переменной?
Ответ №1:
Вы должны просто добавить this.student = response;
внутри subscribe:
this._studentService.addData(this.addStudentForm.value).subscribe( response => {
console.log("respnse", response);
this.student = response;
});
Но если вы хотите что-то student
сделать, вам следует сделать это внутри next
обратного вызова subscribe:
this._studentService.addData(this.addStudentForm.value).subscribe( response => {
console.log("respnse", response);
this.student = response;
console.log(this.student) <- THIS WILL WORK - STUDENT IS NOT UNDEFINED
// HERE ARE YOUR METHODS WHICH ARE USING STUDENT
});
Это console.log
после subsrciption все равно будет неопределенным, потому что этот код будет выполнен ДО завершения подписки, поэтому student
undefinded
на данный момент.
Комментарии:
1. Хотя это добавит ответ
this.student
, пожалуйста, объясните OP, почемуconsole.log(this.student)
все равно будетundeined
2. @jasmin я добавил объяснение к своему ответу, проверьте его
3. о, @yasmin не присваивает значение свойству student
Ответ №2:
Попробуйте:
public responseData:any;
public onSubmit() {
this._studentService.addData(this.addStudentForm.value).subscribe((response:any)=> {
console.log("success: ", JSON.stringify(response));
this.responseData = response;
}, (error:any){
console.log("error: ", JSON.stringify(error));
});
}
Комментарии:
1. что вы можете увидеть в консоли разработчика?
2. Я получаю успех и ответ {«FirstName»:»qwert»,»LastName»:»qwerf»,»DateOfBirth»:»2019-04-24T20:00:00.000Z»} @Khurshid я новичок в angular и, следовательно, я не знал, что объем полученного ответа ограничен подпиской. Итак, это был мой главный вопрос.