代码之家  ›  专栏  ›  技术社区  ›  corry

角度窗体基于下拉值添加输入字段

  •  0
  • corry  · 技术社区  · 6 年前

    有人知道如何基于select元素值显示额外的输入字段并将值推入现有对象吗?

    有一个下拉选择元素 change 指令

    <div class="col-sm-4">
      <select class="form-control mt-2" id="field_countries" name="country" #t formControlName="country" (change)="countryChanged(t.value)">
        <option [value]="country.name" *ngFor="let country of countries"> {{ country.name }} </option>
      </select
    </div>
    

    countryChanged 事件

    countryChanged(value) {
      this.selectedCountry = value;
      console.log(this.selectedCountry);
    }
    

    因此,我尝试根据选定的值添加新的输入字段:

    <div class="col-sm-4" *ngIf="selectedCountry == 'Mexico'">
      <input type="text" class="form-control" name="remark" formControlName="remark" maxlength="200" />
    </div>
    

    但我不知道如何显示输入字段和推送值只为对象的值是选定的,所以结果将是 enter image description here

    相当于 [{person: 'John', country: 'USA'}, {person: 'Pablo', country: 'Mexico', remark: 'Some data'}, {person: 'Michelle', country: 'France'}]

    Stackblitz

    2 回复  |  直到 6 年前
        1
  •  1
  •   Abdul Rafay    6 年前

    将当前值与u声明为“”的模板引用变量匹配 t型

    *ngIf="t.value == 'Mexico'" 在这里:

    <div class="col-sm-4" *ngIf="t.value == 'Mexico'">
      <input type="text" class="form-control" name="remark" formControlName="remark" maxlength="200" />
    </div>
    

    欧洲标准6

      onSubmit() {
        this.persons = this.selectForm.get('persons') as FormArray;
        const temp: any = this.persons.value;
        temp.forEach((v) => {
          Object.keys(v).forEach((key) => (v[key] == '') && delete v[key]);
        })
        console.log(temp)
      }
    

    Stackblitz

        2
  •  1
  •   Ashish Ranjan    6 年前

    我稍微修改了你的堆栈闪电战:看这里: https://stackblitz.com/edit/select-populate-values-kyirzw?file=app%2Fapp.component.ts

    初始化FormGroup时,我没有添加 remark 默认情况下为FromControl。

      getFormGroupByN(n: number) {
      let result = [];
      for (let i = 0; i < n; i++) {
        result.push(this.formBuilder.group({
          'person': '',
          'country': ''
        })
        );
      } // for end 
    
      return result;
    }
    

    我修改了 countryChanged() 方法,现在也接受 index Mexico 我添加了一个窗体控件 评论 在那个特定的小组里 .

    countryChanged(value, i) {
      this.selectedCountry = value;
      // this.getFormGroupByN(this.personsData.length);  // why were you calling this again?
      if (value == "Mexico") {
        let temp =  <FormGroup>(<FormGroup>this.selectForm.get('persons')).controls[i];
        temp.addControl('remark', new FormControl(''));
      }
    }
    

    formContrl而不是CountryName

    <div class="col-sm-4" *ngIf="selectForm.get('persons').controls[i].get('remark')">
       <input type="text" class="form-control" name="remark" formControlName="remark" maxlength="200" />
    </div>