Angular 7 реактивная форма, как получить текст выбранного значения вместо значения в элементе управления формы выпадающего списка - PullRequest
0 голосов
/ 05 декабря 2018

Есть ли способ получить текст выбранного значения из раскрывающегося списка вместо получения значения в реактивных формах?

Мой сценарий выглядит следующим образом:

<form [formGroup]="formGroup" formArrayName="test">
    <ng-container matColumnDef="fr" formArrayName="test">
            <th mat-header-cell *matHeaderCellDef> Family Rel. </th>
            <td mat-cell *matCellDef="let element; let i = index;">
              <div [formGroupName]="i">
                <mat-form-field color="warn" >
                    <mat-label>Family Relation</mat-label>
                    <mat-select (selectionChange)="onChange(element, i)" id="family_relation" formControlName="fr" placeholder="Family Relation">                 
                          <mat-option *ngFor="let familyRelation of familyRelationArray;" [value]="familyRelation.family_relation_id">
                        {{familyRelation.family_relation_type}}
                      </mat-option>
                    </mat-select>
                  </mat-form-field>&nbsp;
                </div>
            </td>
          </ng-container>
</form>

И при выборе изменения (selectionChange="onChange(element, i)") мне нужно получить как выбранное значение, так и его текст.

onChange(data, i)
  {
    let group = (<FormArray>this.formGroup.get('test')).at(i).value;
    let newFr = group['fr'];
    console.log('Value: '+newFr);
  }

Где данные - выбранная строка, а i - индекс выбранного массива форм..

Я пытался использовать старый метод javascript:

<HTMLSelectElement>document.getElementById().text

Но он выдал ошибку:

[ts] Свойство 'text' не имеетсуществуют по типу «HTMLElement».[2339]

РЕДАКТИРОВАТЬ

Я пробовал:

@ViewChild('familyRelation') familyRelation;

А:

<mat-select #familyRelation (selectionChange)="onChange(element, i)" id="family_relation" formControlName="fr" placeholder="Family Relation">                 
                      <mat-option *ngFor="let familyRelation of familyRelationArray;" [value]="familyRelation.family_relation_id">
                    {{familyRelation.family_relation_type}}
                  </mat-option>
                </mat-select>

И послеутешительно:

enter image description here

enter image description here

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

Исходя из ваших комментариев, вам нужен общий способ доступа к вашему HTML-элементу.Angular предоставляет простой способ сделать это

<mat-select #selectFamilyRelation
            (selectionChange)="onChange()" 
            id="family_relation" 
            formControlName="fr" 
            placeholder="Family Relation">                 
  <mat-option *ngFor="let familyRelation of familyRelationArray;" 
              [value]="familyRelation.family_relation_id">
    {{familyRelation.family_relation_type}}
  </mat-option>
</mat-select>

Внутри вашего компонента:

создать атрибут класса: @ViewChild('selectFamilyRelation') familyRelation;

, а затем получитьтекст выбранного вами варианта:

onChange() {
  const selectedOptionText = this.familyRelation._elementRef.nativeElement.innerText;
  // ...
}
0 голосов
/ 05 декабря 2018

Сначала получите значение из формы управления.Затем получите элемент, связанный со значением, просматривая массив.Наконец получить текст от предмета

onChange(data, i)
  {
    let text = formGroup.get("fr").value;
    let newFr =this.familyRelationArray.find((item) => item.family_relation_id === text)
    if(newFr){
        console.log('text: '+newFr.family_relation_type); 
    }
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...