【问题标题】:using value of *ngfor in template variable在模板变量中使用 *ngfor 的值
【发布时间】:2020-11-02 04:13:53
【问题描述】:

我必须使用选择标签来选择社交句柄的类型

我已经在 .ts 文件的一个数组中存储了一个 select 的可能值数组。

socialHandleOptions=['Website', 'Facebook', 'Instagram', 'LinkedIn'];

我正在使用 *ngfor 来迭代值,但我没有在另一个标签中获取它,因为我需要存储与特定社交句柄 formcontrol 字段相对应的值。

我尝试使用模板变量,但无法获取值。

              <div class="row">
                <div class="col-md-4 col-sm-5">
                  <select>
                    <option *ngFor="let handle of socialHandleOptions" #hnd >{{handle}}</option>
                  </select>
                </div>

                <div class="col-md-8 col-sm-7 pl-sm-1">
                  <input type="text" formControlName={{hnd}} placeholder="Enter URL">
                </div>
                <a (click)="handleConsole(hnd)"><img src="assets/img/profile/minus.svg" alt=""></a>
              </div>

【问题讨论】:

  • 我无法弄清楚问题所在。你得到什么错误信息?
  • 我在 select > 选项标签中放入的引用变量,即 #hnd 不可用于 formControlName 或其他行。假设我从下拉列表中选择“网站”,我放入文本输入应与“网站”相对应,对于 instagram、facebook 和linkedin 更是如此
  • 你能分享更多你的代码吗,不清楚你如何使用formGroup或formArray,你如何设置表单? ??????????

标签: angular angular2-template ngfor


【解决方案1】:

您需要将所选选项分配给一个变量,然后在另一个标签中使用该变量。它可能会解决您的问题。

<mat-form-field appearance="fill">
    <mat-label>Favorite food</mat-label>
    <mat-select [(ngModel)]="selectedValue" name="food">
      <mat-option *ngFor="let food of foods" [value]="food.value">
        {{food.viewValue}}
      </mat-option>
    </mat-select>
</mat-form-field>

<input type="text" formControlName="selectedValue" placeholder="Enter URL">

【讨论】:

    【解决方案2】:

    据我了解,您有 formArray 的图片,并且您有一个与所选社交帐户类型相关的社交和链接的下拉列表,这意味着您可能有两条与 Facebook 相关的记录作为示例

    模板

    <ng-container *ngFor="let fg of socialForm.controls">
        <div class="col-md-4 col-sm-5" [formGroup]="fg">
            <select formControlName="socialAccountType">
          <option *ngFor="let handle of socialHandleOptions"  >{{handle}}</option>
        </select>
    
            <input type="text" formControlName="link" placeholder="Enter URL">
      </div>
    
    </ng-container>
    
    <button (click)="addNew()">Add New ➕</button>
    
    <pre>{{socialForm.value | json}}</pre>
    

    组件

      socialForm :FormArray;
      socialHandleOptions=['Website', 'Facebook', 'Instagram', 'LinkedIn'];
    
      constructor(private fb:FormBuilder){
        this.socialForm = fb.array([this.getFormGroupItem()])
      }
    
      getFormGroupItem() : FormGroup{
        return this.fb.group({
          socialAccountType:null,
          link:null
        })
      }
    
      addNew(){
         this.socialForm.push(this.getFormGroupItem())
      }
    

    demo ??

    另一个使用 formGroup 的案例有一个社交类型的表单控件,但我仍然不确定链接输入旁边的加号图标

    模板

    <div [formGroup]="socialForm">
    
        <ng-container *ngFor="let c of socialHandleOptions">
            <div class="col-md-4 col-sm-5">
                <label>{{c}}</label>
                <input type="text" [formControlName]="c | lowercase" placeholder="Enter URL">
      </div>
    
        </ng-container>
    </div>
    

    组件

     socialForm: FormGroup;
      socialHandleOptions = ["Website", "Facebook", "Instagram", "LinkedIn"];
    
      constructor(private fb: FormBuilder) {
        this.socialForm = this.fb.group({
          website: null,
          facebook: null,
          instagram: null,
          linkedin: null
        });
      }
    

    demo ??

    【讨论】:

    • 加号图标用于功能,用户可以动态创建新字段以输入剩余选项之一,用户只能选择一次社交句柄。如果用户从下拉列表中选择 facebook 之类的选项,然后单击 + 号,将出现一个新行,下拉并输入,但在下拉列表中,facebook 选项将不可用。
    • 你能帮我实现上述功能吗?减号也是删除特定行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-10
    • 1970-01-01
    • 1970-01-01
    • 2018-06-20
    • 2017-07-12
    • 2020-08-27
    相关资源
    最近更新 更多