Angular 4获取选择控件的选定选项的文本

Posted

技术标签:

【中文标题】Angular 4获取选择控件的选定选项的文本【英文标题】:Angular 4 Get the Text of Selected option of Select control 【发布时间】:2018-04-23 09:14:11 【问题描述】:

我正在尝试在 Angular 4 中获取 Select 控件的 Text of Selected 选项。

html

<div class="col-sm-6 form-group">
<label>Industry</label>
<select   class="form-control select"  formControlName="Industry">
<option value="">Please select Value</option>  
<option *ngFor="let industry of industries"  
[ngValue]="industry.ID">industry.Name  
</option>  
</select> 
</div>


upload.component.ts
this.form.controls['Industry'].valueChanges.subscribe((name) => 
                this.form.controls['IndustryName'].setValue(name);
  );

我正在使用 Reactive 的 formControlName 属性。

请提出检索选定选择控件文本的想法

【问题讨论】:

你得到了什么错误 您能否提供更多代码来说明您在何处以及如何尝试获取文本? 我想在“IndustryName”表单控件名称中设置选定的行业文本 【参考方案1】:

进行以下更改

模板

<form [formGroup]="test">
    <div class="col-sm-6 form-group">
        <label>Industry</label>
        <select class="form-control select" formControlName="Industry">
      <option *ngFor="let industry of industries"  [ngValue]="industry.id">industry.id </option>  
</select>
    </div>
</form>

<pre>test.value | json </pre>

组件

import  Component,OnInit  from '@angular/core';
import FormArray, FormGroup, FormControl, Validators from "@angular/forms";

@Component(
  selector: 'my-app',
  templateUrl: './app.component.html',
  styleUrls: [ './app.component.css' ]
)
export class AppComponent implements OnInit  
  name = 'Angular 5';
  test:FormGroup;
  industries = [id:1,id:2];

  ngOnInit()
     this.test = new FormGroup(
      Industry:new FormControl('')
    );

    this.test.get('Industry').valueChanges.subscribe(data => console.log(data));

  


Working Link

【讨论】:

感谢拉胡尔的回复。但我想要行业的文本。例如:我的行业有值 Id: 1 , Name: Pravin Id: 2 , Name : Rahul 选择“Pravin”文本后,我可以将值设为“1”,但我想要文本值,即“Pravin” @Pravin 更新了工作链接检查 嗨 Rahul,我不想更改选项的值属性。它应该只是 Industry.Id 那么您可以使用组件中的数据并在数组中使用它来获取值 @Pravin 我已经更新了一些谷歌搜索也希望得到帮助【参考方案2】:

尝试以下方法:

模板

上传.component.html

<form [formGroup]="form">
  <div class="col-sm-6 form-group">
    <label>Industry</label>
      <select class="form-control select" 
        formControlName="industry" (change)="onChange()">
          <option value="">Please select Value</option>  
          <option *ngFor="let industry of industries"  
            [ngValue]="industry.id"> industry.name   
          </option>  
      </select> 
  </div>
</form>

组件

上传.component.ts

import  Component, OnInit  from '@angular/core';
import  FormGroup, FormControl  from "@angular/forms";

@Component(
  selector: 'app-upload',
  templateUrl: './upload.component.html',
  styleUrls: [ './upload.component.css' ]
)    

export class UploadComponent implements OnInit  
  form: FormGroup;
  select: FormControl;
  industries = [
    id: 1, name: 'Mining',
    id: 2, name: 'Information Technology',
    id: 3, name: 'Entertainment'
  ];

  ngOnInit()
    this.createForm();
  

  createForm() 
    this.select = new FormControl('');
    this.form = new FormGroup(
      select: this.select
    );
  

  onChange() 
    console.log(this.select.value);

    # to get the name that was selected

    const id = parseInt(this.select.value, 0);
    const selected = this.industries
      .filter(industry => industry.id === id)
      .reduce(function(str: string, project) 
        return str + project.name;
      , '');

    console.log(selected.name);
  

希望这会有所帮助,并且准时。 :)

【讨论】:

【参考方案3】:

你可以这样做:

在你看来

<select class="select" (change)="onChange($event.target.value)" [(ngModel)]="someObject.BoundItem" name="BoundItem" #BoundItem="ngModel">
   <option *ngFor="let item of myObject" [value]="item.Id">item.displayiItem</option>
</select>

在你的组件中

onChange(selectedId: number)

   this.selectedItem = this.myObject.find((x: any) => x.Id == selectedId); 
   console.log(this.selectedItem["displayItem");

【讨论】:

【参考方案4】:

实现这一点的最简单方法是:从 HTML 中获取 id,使用 id 值引发事件,然后在您的集合中搜索该项目。

HTML

<select class="form-control" [(ngModel)]="selectedStatusId" (change)="setSelectedStatus(selectedStatusId)">
   <option *ngFor="let status of statusList" [value]="status.id">status.name
   </option>
</select>

TypeScript

public setSelectedStatus(value: string): void 

  if (this.statusList && value) 
     let status: ListItemSimplified = this.statusList.find(s => s.id == value);
     if (status)
       this.selectedStatus = status.name;
   
   else
      this.selectedStatus = '';
 

模型类

export class ListItemSimplified 
  id: string;          
  name: string;         

【讨论】:

他试图获取选定的值,而不是设置它。 @Jason Cheng,您是对的,但是,获取所选值的最直接方法是将控件绑定到变量,因此每次选择更改时,您仍将拥有更新的值。这也可以使用“模板引用变量”甚至使用 ElementRef 来完成。但是,正如我所说,我所知道的最直接的方法是我建议的方法。你知道更好的方法吗?请与我们分享。【参考方案5】:
getSelectedOptionText(event: Event) 
   let selectedOptions = event.target['options'];
   let selectedIndex = selectedOptions.selectedIndex;
   let selectElementText = selectedOptions[selectedIndex].text;
   console.log(selectElementText)

HTML

<select class="form-control select" formControlName="Industry" (change)="getSelectedOptionText($event)">
  <option value="">Please select Value</option>  
  <option *ngFor="let industry of industries" value="industry.ID">industry.Name</option>
</select>

【讨论】:

【参考方案6】:

您可以使用 $event 属性简单地获取选定的值和文本

html代码

<label>Select Market</label><br/> 
<select class="user-preselect btn-add" style="width: 90%;height: 34px;"(change)="selectchange($event)"> 
<option value="0" selected="selected">ADD Market</option> 
<option *ngFor="let country of Countrylist" [value]="country.id" >country.name</option> 
</select><br/><br/> 

打字稿代码

selectchange(args) 
  this.countryValue = args.target.value; 
  this.countryName = args.target.options[args.target.selectedIndex].text; 
 

【讨论】:

【参考方案7】:

你可以使用

<select class="form-control" (change)="onChange($event)">

</select>

然后在组件中

onChange($event)
let text = $event.target.options[$event.target.options.selectedIndex].text;

【讨论】:

【参考方案8】:

使用#reference 变量有一种比其他任何答案都简单得多的方法...

进行了大量的实验以使其发挥作用。

<select #selectedSegment id="segment" name="segment" [(ngModel)]="entryForm.segmentId" type="text">
    <option *ngFor="let segment of segments" value="segment.id">segment.segmentName</option>
</select>

<div *ngIf="selectedSegment.selectedIndex !== -1 && selectedSegment.options.item(selectedSegment.selectedIndex).text === 'Testing'">

     selectedSegment.options.item(selectedSegment.selectedIndex).text 

</div>

【讨论】:

【参考方案9】:

HTML:

<div class="form-group">
        <label for="SelectCountry" class="col-md-3">Country</label>
        <div class="col-md-9">
          <select class="form-control" formControlName="Country" (change)="onChangeCountry($event)">
            <option *ngFor="let country of country; let i = index" value="i">country.name</option>
          </select>
        </div>
      </div>

.ts:

private SelectedCountry: any;
onChangeCountry($event) 
        this.SelectedCountry = $event.target.options[$event.target.options.selectedIndex].text;
      

【讨论】:

【参考方案10】:

.ts页面,继续下面的代码..

(this.industries.filter((ele)=>return ele.ID==this.form.controls['Industry'].value))[0].Name

您将获得行业名称。

【讨论】:

【参考方案11】:

如果你只想要标题值。

简单使用:

public onOptionsSelected(event) 
   const value = event.target.value;

    let id = event.target.options[event.target.options.selectedIndex].title;
    alert(id);

【讨论】:

【参考方案12】:

HTML

 <select class="form-control" formControlName="modelCode" (change)="changeValue($event)">                
            </option>
          </select>

TS

changeValue(event: any): void 
let text = event.target.options[event.target.options.selectedIndex].text;
console.log(text);

【讨论】:

以上是关于Angular 4获取选择控件的选定选项的文本的主要内容,如果未能解决你的问题,请参考以下文章

如何从 webBrowser 控件中的当前选定选项中获取 innerText

WPF 选项卡控件:如何获取当前选定的选项卡?

Angular 2使用选择选项保留选定对象的值[重复]

如何在Angular 7中单击按钮时获取下拉列表的选定选项[重复]

Angular 2:如何从表单的不同选项中获取选定的值?

从 Angular 的下拉列表中删除选定的选项