最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

angular - Need to load the data while form get displaying, all the data should be set in the controller, during form load - Stac

programmeradmin2浏览0评论

In the form which values need to be set in controller, those values should be loaded after the spinner , and during form loading ,I have tried to use async and await,

but after form get displayed those values loading one by one, I need during the form load that values need to be set in the controller

html file

<app-spinner *ngIf="pageSpinner" [overlay]="true" [showNavBar]="true"></app-spinner>

ts file

                export class NewUser{   
                                 ngOnInit() {
                                        this.pageSpinner=true;
                                        this.setupUserRequestPage();
                                         this.createForm();
                                         this.initRefData();
                                         this.pageSpinner=false;
                                      }
                                
                            
                    //this call setting the request
                    setupUserRequestPage() {
                              this.getRefNumber();
                               this.getUserRequestFormData(this.user);
                              }
                    
                setUserData(data) {
                    //this.userRequestForm.controls.requestControl.setValue(data.firstName + ' ' +data.lastName);
                    //this.userRequestForm.controls.statusControl.setValue(data.id);
                  this.userRequestForm.controls.statusControl.setValue(RefDataService.getRefDtoFormListByCode(this.userStatusList, "OPEN"));
                  this.userRequestForm.controls.assigneeControl.setValue(ASSIGNEE.FIRST_NAME + ' ' + ASSIGNEE.LAST_NAME);
                  }
                
            //getting reference number and set it in refcodeControl
            getRefNumber() {
                    this.userRequestSubscription = this.userService.getRequestReferenceNumber().subscribe(
                      response => {
                        this.userRequestForm.controls['refCodeControl'].setValue(response.code);
                        this.RequestReferenceNumber = this.userRequestForm.controls['refCodeControl'].value;
                      },
                      () => {
                        this.toaster.error("error in generating unique Reference Number", '', TOASTR_TIMEOUT);
                      }
                    );
                  }
                    
                    
                
        
        createForm() {
                    this.userRequestForm = this.userFormBuilder.group(
                      {
                        CodeControl: [{ value: '', disabled: true }],
                        requesControl: [{ value: '', disabled: true }],
                        // projectIdControl: new FormControl('', Validators.required),
                        statusControl: [{ value: '', disabled: true }],
                        assigneeControl: [{ value: '', disabled: true }],
                        descriptionControl: [{ value: '', disabled: false }, Validators.required],
                
                      }
                    );
                
                  }
                
            
    
    //Passing the response to setUserData
    getUserRequestFormData(user) {
            const userdata = this.service.getData(user).toPromise().then(response => {
              // console.log(response);
              this.setUserData(response);
            }
            );
            console.log(userdata);
        
          }
            

 
async initRefData() {
        
            this.selectevalue = await this.sharedService.pn();
            this.sharedService.Ebm(this.selectevalue).subscribe(
              (response) => {
                this.currentUser = response;
                this.userRequestForm.controls.requesControl.setValue(EBMDtoUtil.getEbmName(this.currentUser));
        
              }
        
            );
        
          }
        }

In the form which values need to be set in controller, those values should be loaded after the spinner , and during form loading ,I have tried to use async and await,

but after form get displayed those values loading one by one, I need during the form load that values need to be set in the controller

html file

<app-spinner *ngIf="pageSpinner" [overlay]="true" [showNavBar]="true"></app-spinner>

ts file

                export class NewUser{   
                                 ngOnInit() {
                                        this.pageSpinner=true;
                                        this.setupUserRequestPage();
                                         this.createForm();
                                         this.initRefData();
                                         this.pageSpinner=false;
                                      }
                                
                            
                    //this call setting the request
                    setupUserRequestPage() {
                              this.getRefNumber();
                               this.getUserRequestFormData(this.user);
                              }
                    
                setUserData(data) {
                    //this.userRequestForm.controls.requestControl.setValue(data.firstName + ' ' +data.lastName);
                    //this.userRequestForm.controls.statusControl.setValue(data.id);
                  this.userRequestForm.controls.statusControl.setValue(RefDataService.getRefDtoFormListByCode(this.userStatusList, "OPEN"));
                  this.userRequestForm.controls.assigneeControl.setValue(ASSIGNEE.FIRST_NAME + ' ' + ASSIGNEE.LAST_NAME);
                  }
                
            //getting reference number and set it in refcodeControl
            getRefNumber() {
                    this.userRequestSubscription = this.userService.getRequestReferenceNumber().subscribe(
                      response => {
                        this.userRequestForm.controls['refCodeControl'].setValue(response.code);
                        this.RequestReferenceNumber = this.userRequestForm.controls['refCodeControl'].value;
                      },
                      () => {
                        this.toaster.error("error in generating unique Reference Number", '', TOASTR_TIMEOUT);
                      }
                    );
                  }
                    
                    
                
        
        createForm() {
                    this.userRequestForm = this.userFormBuilder.group(
                      {
                        CodeControl: [{ value: '', disabled: true }],
                        requesControl: [{ value: '', disabled: true }],
                        // projectIdControl: new FormControl('', Validators.required),
                        statusControl: [{ value: '', disabled: true }],
                        assigneeControl: [{ value: '', disabled: true }],
                        descriptionControl: [{ value: '', disabled: false }, Validators.required],
                
                      }
                    );
                
                  }
                
            
    
    //Passing the response to setUserData
    getUserRequestFormData(user) {
            const userdata = this.service.getData(user).toPromise().then(response => {
              // console.log(response);
              this.setUserData(response);
            }
            );
            console.log(userdata);
        
          }
            

 
async initRefData() {
        
            this.selectevalue = await this.sharedService.pn();
            this.sharedService.Ebm(this.selectevalue).subscribe(
              (response) => {
                this.currentUser = response;
                this.userRequestForm.controls.requesControl.setValue(EBMDtoUtil.getEbmName(this.currentUser));
        
              }
        
            );
        
          }
        }
Share Improve this question edited Mar 6 at 16:31 web_in asked Mar 6 at 14:12 web_inweb_in 1336 bronze badges
Add a comment  | 

1 Answer 1

Reset to default 0

Instead of mixing promises and observables, convert all the functions to return observables, use tap to perform the side effects (patching form values).

Then we use forkJoin to make the API calls in parallel and on the subscribe hide the loader.

export class App {
  private sub: Subscription = new Subscription();

  ngOnInit() {
    this.pageSpinner = true;
    this.createForm();
    this.sub.add(
      forkJoin([
        this.getRefNumber(),
        this.getUserRequestFormData(this.user),
        this.initRefData(),
      ]).subscribe(() => {
        this.pageSpinner = false;
      })
    );
  }

  setUserData(data) {
    //this.userRequestForm.controls.requestControl.setValue(data.firstName + ' ' +data.lastName);
    //this.userRequestForm.controls.statusControl.setValue(data.id);
    this.userRequestForm.controls.statusControl.setValue(
      RefDataService.getRefDtoFormListByCode(this.userStatusList, 'OPEN')
    );
    this.userRequestForm.controls.assigneeControl.setValue(
      ASSIGNEE.FIRST_NAME + ' ' + ASSIGNEE.LAST_NAME
    );
  }

  //getting reference number and set it in refcodeControl
  getRefNumber() {
    return this.userService.getRequestReferenceNumber().pipe(
      tap({
        next: (response) => {
          this.userRequestForm.controls['refCodeControl'].setValue(
            response.code
          );
          this.RequestReferenceNumber =
            this.userRequestForm.controls['refCodeControl'].value;
        },
        error: () => {
          this.toaster.error(
            'error in generating unique Reference Number',
            '',
            TOASTR_TIMEOUT
          );
        },
      })
    );
  }

  createForm() {
    this.userRequestForm = this.userFormBuilder.group({
      CodeControl: [{ value: '', disabled: true }],
      requesControl: [{ value: '', disabled: true }],
      // projectIdControl: new FormControl('', Validators.required),
      statusControl: [{ value: '', disabled: true }],
      assigneeControl: [{ value: '', disabled: true }],
      descriptionControl: [{ value: '', disabled: false }, Validators.required],
    });
  }

  //Passing the response to setUserData
  getUserRequestFormData(user) {
    return this.service.getData(user).pipe(
      tap((response) => {
        // console.log(response);
        this.setUserData(response);
      })
    );
  }

  initRefData() {
    return this.sharedService
      .pn()
      .pipe(
        switchMap((selectevalue: any) => this.sharedService.Ebm(selectevalue))
      )
      .pipe(
        tap((response) => {
          this.currentUser = response;
          this.userRequestForm.controls.requesControl.setValue(
            EBMDtoUtil.getEbmName(this.currentUser)
          );
        })
      );
  }

  ngOnDestroy() {
    this.sub.unsubscribe();
  }
}

与本文相关的文章

发布评论

评论列表(0)

  1. 暂无评论