javascript - 无法从 Angular 的下拉列表中填充和发布值

标签 javascript html angular twitter-bootstrap

当我加载页面时,我的类别下拉列表会自动填充数据库中的数据,然后我想从该下拉列表中选择值,然后单击按钮将数据发布到给定的网址。页面加载时,下拉列表已正确填充,没有任何错误,但是当我在下拉列表中选择任何值时,出现此错误:

ERROR Error: Error trying to diff 'c'. Only arrays and iterables are allowed

如何解决此错误?

我的 add-form.component.ts

    import { Component, OnInit } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { FormGroup, NgForm } from '@angular/forms';

interface LoginFormModel{
  productName?: string;
  retailPrice?: string;
  wholesalePrice?: string;
  category?: Category; 
  type?: string;
  productionStart?: string;
  productionEnd?: string;
}

interface Category{
  id?: number;
  name?: string;
}


@Component({
  selector: 'app-add-form',
  templateUrl: './add-form.component.html',
  styleUrls: ['./add-form.component.scss']
})

export class AddFormComponent implements OnInit {
  model: LoginFormModel= {};
  category: Category = {};
  form?: FormGroup;

  constructor(private httpClient: HttpClient) { }

  ngOnInit() {
    this.httpClient.get('http://localhost:8090/api/category/')
      .subscribe(data => {
        this.model.category = data;
        console.log(this.model.category);
      }, err => {
        console.log('Error: ', err);
      })
  }

  eventSubmit(form: NgForm){
    if(form.invalid){
      return;
    }else{
      this.onSubmit();
    }
  }

  onSubmit() {
    console.log(this.model);
    this.httpClient.post('http://localhost:8090/api/product/',this.model)
      .subscribe(data => {
        console.log(data);
      })
  }
}

下拉菜单:

 <div class="form-group">
   <label class="col-md-3 control-label" for="category">Category:</label>
    <div class="col-md-9">
      <select class="form-control" required id="sel2" name="category" class="form-control" #formInput="ngModel"
                                [(ngModel)]="model.category">
        <option *ngFor="let c of model.category" value="c">{{c.name}}</option>
      </select>
       <div class="invalid-feedback">
         Category is required!
    </div>
  </div>
</div>

最佳答案

我认为这行有一个错误,

<option *ngFor="let c of model.category" value="c">{{c.name}}</option>

我认为value="c"应该是类似 [value]="c.value"value="{{c.value}}"

如果不改成这样, [value]="c.name"

关于javascript - 无法从 Angular 的下拉列表中填充和发布值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53132736/

相关文章:

html - 特定表格行的 CSS

html - 缩小屏幕尺寸时保持边距?

angular - Angular 2+ 中 *ngIf 与 [ngSwitch] 之间的区别

arrays - 在 ngFor 中合并两个数组

JavaScript - 检测按钮上的滑动?

javascript - 什么是预定义的原始构造函数?

javascript - 输入检查用户输入了 0-9 之间的值 Javascript

html - 盒子的底部 div 放置到前一个盒子的底部

javascript - 每当我点击连接元掩码按钮时,为什么它会连接 coinbase 钱包?

javascript - JS 工具到 Typescript