【问题标题】:How do I retrieve the values for a multiselect in angular foms?如何以角度形式检索多选的值?
【发布时间】:2020-01-29 14:58:11
【问题描述】:

我在以我的角度形式检索多选控件的选定值时遇到问题。基本上我得到的是数组位置而不是实际的 id 值。

这是我的控制

<mat-option *ngFor="let asset of (assetList | async)" [value]="asset.assetId">{{asset.assetName}}</mat-option>

以及表单初始化

profileForm=this.fb.group({
    assets:[],
    capacity:[],
  });

这是我检索值的代码

for(var asset in this.profileForm.controls["assets"].value){
      let assetItem=new Asset();
      assetItem.AssetId=Number(asset);
      assetList.push(assetItem);
    }

当我执行 console.log(this.profileForm.controls["assets"].value) 时,这是表单中的值(来自 chrome 控制台)

> value: Array(3) 
0: 1 
1: 2 
2: 3 
length: 3

所以基本上我得到的值是 0 而不是 1 和 1 而不是 2 等等。

我做错了什么?

【问题讨论】:

  • 你能把 [value] 改成 [ngValue] 并检查一下吗?
  • 将其更改为 ngValue 会导致错误,因为它不是 mat-option 上的有效属性
  • 如果您在下拉列表中选择随机项目,例如第 1 项和第 3 项。输出是什么?
  • 完全一样(即我得到的是数组位置而不是值)例如 0:2 1:4 2:6
  • 是的,这是因为 map-options 以数组格式返回输出,索引从 0 开始。但是您选择的元素的 ID 是正确的。

标签: angular angular7 angular-formbuilder


【解决方案1】:

好的,我发现我做错了什么......

如果我改变了

for(var asset in this.profileForm.controls["assets"].value){
      let assetItem=new Asset();
      assetItem.AssetId=Number(asset);
      assetList.push(assetItem);
    }

for(var asset of this.profileForm.controls["assets"].value){
      let assetItem=new Asset();
      assetItem.AssetId=Number(asset);
      assetList.push(assetItem);
    }

它得到正确的值。基本上 For...in 返回被迭代对象的键,而 For...of 返回被迭代对象的值。

【讨论】:

    猜你喜欢
    • 2019-04-12
    • 2023-02-03
    • 1970-01-01
    • 2019-10-30
    • 2017-02-20
    • 2016-03-01
    • 2021-05-26
    • 1970-01-01
    • 2021-06-04
    相关资源
    最近更新 更多