通过选择下拉选项输出对象值

时间:2019-05-23 14:02:35

标签: angular angular-reactive-forms

我正在用角度7构建反应形式,我想做的是: 1.从“名称”下拉列表中选择一个用户; 2.在“用户名”部分(image)下自动显示属于该用户的用户名; 3.提交表单时,我只想发送所选用户的ID。

我当前的方法适用于步骤1和步骤2,我现在遇到的唯一问题是将[user]对象绑定到[ngValue]而不是ID,这导致我提交了用户的所有详细信息最后,不只是ID。同样显然,我应该停止在反应形式上使用ngModelChange。

我不确定是否可以解决此问题。如果使用“ user.id”作为值,则无法再访问用户名(或用户的其他详细信息)。

我看到了一些使用ngModel和ngModelChange的示例,但是根据angular doc,“在Angular v6中已弃用对ngModel输入属性和ngModelChange事件与反应形式指令的支持,并将在Angular v7中删除。 / p>

对于我正在使用的数据this

html

CFRelease((__bridge CFTypeRef)(client));

ts

 <form class="form" [formGroup]="addUser" (ngSubmit)="onSubmit()">
    <div class="row">
      <div class="col-3">
        <div class="form-group">
          <label for="username">Username:</label>
          <p>{{selectedUser.username}}</p>

        </div>
      </div>
      <div class="col-9">
        <div class="form-group">
          <label for="name">Name:</label>
          <select class="form-control" formControlName="name" (ngModelChange)="selectUser($event)">
            <option *ngFor="let user of users" [ngValue]="user">{{ user.name }}</option>
          </select>
        </div>
      </div>
    </div>
</form>

2 个答案:

答案 0 :(得分:0)

您可以尝试以下操作:

<select class="form-control" formControlName="name" [ngModel]="selectUser" name="selectUser" (ngModelChange)="selectUser($event)">

在.ts中:

@Output() selectUser: number;

....
  selectUser(selectUser) {

    this.selectUser = selectUser;
}

编辑:

错误出现在[ngValue]中:

<option *ngFor="let user of users" [ngValue]="user.id">{{ user.name }}

您需要将用户ID放在ngValue中,而不是用户对象中

答案 1 :(得分:0)

尝试一下:

<select class="form-control" 
      formControlName="name" 
      (change)="selectUser()">
<option *ngFor="let user of users"  
        [ngValue]="user">{{ user.name }}</option>
  </select>

在组件中

userID: number;
userName: string;

selectUser = () => {
   const user = this.addUser.get('name').value;
   this.userId = user.id;
   this.userName = user.name
};