【问题标题】:angular create formarray instances based on mysql records角度根据mysql记录创建formarray实例
【发布时间】:2020-02-07 23:50:23
【问题描述】:

我在 mysql 数据库中有一些记录。我想在基于mysql行的formarray中添加formcontrols。如果我传递我的 mysql 成功数据,我会收到错误消息“无法读取未定义的属性‘控件’”。如果我将静态对象传递给 formarray,那么代码运行良好。

我在 ngOnInit 的控制台中记录了面粉列表。但是我在console.log 中得到了未定义的响应。

我的ts文件代码如下


import { FormGroup, FormControl, FormArray, FormBuilder, Validators } from '@angular/forms'
@Component({
  selector: 'app-grain-flour-list',
  templateUrl: './grain-flour-list.page.html',
  styleUrls: ['./grain-flour-list.page.scss'],
})
export class GrainFlourListPage implements OnInit {

  form: FormGroup;
  packagesArray: FormArray;
  sampledata
  add_cart_data
  flour_list
  id
  price
  temp_quantity
  product_id
  quantity
  category_id
  Flours_list
  constructor(public navCtrl: NavController, private fb: FormBuilder,
    public route: ActivatedRoute, public router: Router, public authservice: AuthService) {


    this.route.queryParams.subscribe(params => {
        this.category_id = params.id;

        this.authservice.flour_list(this.category_id).subscribe((data) => {
          this.Flours_list = data
          this.flour_list = this.Flours_list.data

        })
      })



  }
  ngOnInit() {

    this.form = new FormGroup({

      sections: new FormArray(this.flour_list.map(item => {
        const group = this.initSection();
        group.patchValue(item);
        return group;
      }))
    });

  }

  initSection() {
    return new FormGroup({
      category_id: new FormControl(''),
      price: new FormControl(''),
      name: new FormControl('')

    });
  }

  onEventSubmit() { }




  getSections(form) {
    return form.controls.sections.controls;
  }



}


【问题讨论】:

    标签: angular angular-reactive-forms formarray


    【解决方案1】:

    问题可能是,flour_list 的数据仅在您的页面呈现后才出现。也就是说,ngOnInit() 被执行,并且 FormFormArray 在页面加载后立即被初始化,然后只有数据被分配给 flour_list em>。

    你可以试试,在ngOnInit()里面调用authservice,然后在subscribe()函数里面初始化Form,如下:

    import { FormGroup, FormControl, FormArray, FormBuilder, Validators } from '@angular/forms'
    @Component({
      selector: 'app-grain-flour-list',
      templateUrl: './grain-flour-list.page.html',
      styleUrls: ['./grain-flour-list.page.scss'],
    })
    export class GrainFlourListPage implements OnInit {
    
      form: FormGroup;
      packagesArray: FormArray;
      sampledata
      add_cart_data
      flour_list
      id
      price
      temp_quantity
      product_id
      quantity
      category_id
      Flours_list
      constructor(public navCtrl: NavController, private fb: FormBuilder,
        public route: ActivatedRoute, public router: Router, public authservice: AuthService) {
    
      }
      ngOnInit() {
    
        this.route.queryParams.subscribe(params => {
            this.category_id = params.id;
    
            this.authservice.flour_list(this.category_id).subscribe((data) => {
              this.Flours_list = data
              this.flour_list = this.Flours_list.data
    
              this.form = new FormGroup({
    
                sections: new FormArray(this.flour_list.map(item => {
                  const group = this.initSection();
                  group.patchValue(item);
                  return group;
                }))
              });
    
            })
          })
    
    
      }
    
      initSection() {
        return new FormGroup({
          category_id: new FormControl(''),
          price: new FormControl(''),
          name: new FormControl('')
    
        });
      }
    
      onEventSubmit() { }
    
    
    
    
      getSections(form) {
        return form.controls.sections.controls;
      }
    
    
    
    }
    

    【讨论】:

    • 不工作。收到错误为“未捕获(承诺中):错误:formGroup 需要一个 FormGroup 实例。请传入一个。”
    • @AmeyKulkarni 此错误可能与您的HTML 代码有关。在您访问 HTML 页面中的表单控件之前,请检查您是否添加了表单组实例。喜欢:<form [formGroup]="form"> **YourCodeHere** </form>
    猜你喜欢
    • 2021-04-26
    • 2019-09-21
    • 1970-01-01
    • 2018-06-17
    • 1970-01-01
    • 1970-01-01
    • 2018-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多