Сохраните результат подписки и исправьте его

#angular

Вопрос:

Как я могу сохранить данные в requestArray, а затем использовать их для исправления?

requestArray не используется в коде

Я пытался, но это дает мне неопределенную одну строку, прежде чем исправлять ее.

   ngOnInit(): void {
    this.getOneRequest(localStorage.getItem("xyz")); //returns id of the array
  }

  requestArray: any;

  data={areaOfInterest:"",resourceDTOS:[{seniority:"",skillDTOS:[{skill:"",},],resourceNotes:"",},],}; 
//just a json

  myForm: FormGroup;

  constructor(private fb: FormBuilder, private requestService: RequestService) {
    this.myForm = this.fb.group({
      areaOfInterest: [""],
      startDate: [""],
      endDate: [""],
      description: [""],
      notes: [""],
      resourceDTOS: this.fb.array([]),
    });
    this.setResourceDTOS();

    console.log(this.requestArray); //returns undefined
    this.myForm.patchValue(this.requestArray);
  }

  getOneRequest(id: string) {
    return this.requestService.GetSingleRequest(id).subscribe((data) => {
      console.log(data);
      JSON.stringify(data);
      this.requestArray = data;
    });}
 

Что я могу сделать, чтобы потенциально исправить это?

Ответ №1:

Метод конструктора всегда выполняется до ngOnInit. Кроме того, ответ можно использовать только в запросе API.

Чтобы устранить эту проблему, переместите запрос API в конструктор и вызовите функцию patchValue в запросе:

Новый конструктор:

  constructor(private fb: FormBuilder, private requestService:      RequestService) {
     this.myForm = this.fb.group({
       areaOfInterest: [""],
       startDate: [""],
       endDate: [""],
       description: [""],
       notes: [""],
        resourceDTOS: this.fb.array([]),
      });
      this.setResourceDTOS();

   this.requestService.GetSingleRequest(id).subscribe((data)      => {
       console.log(data);
       JSON.stringify(data);
       this.requestArray = data;

      console.log(this.requestArray); //will no longer be undefined
      this.myForm.patchValue(this.requestArray);
   });
 }