Как я могу установить значение по умолчанию в компоненте для запуска выбора Mat (изменить) - PullRequest
0 голосов
/ 22 ноября 2018

Здравствуйте, я пытаюсь установить значение по умолчанию в mat-select с несколькими параметрами в component.ts, и мне удается это сделать, но когда я устанавливаю значение по умолчанию программно, метод, который должен выполняться, когдазначение изменяется, не выполняется, если я не изменяю значение вручную, я использую триггер директивы (change) для метода, есть ли что-нибудь еще, что я могу использовать?как другая директива.

Я использую ngModel для установки значения по умолчанию на данный момент, устанавливая значение для object.attribute

<mat-select [compareWith]="compareBasic" id="object" name="object" 
                    [(ngModel)]="object.attribute" (change)="methodThatIWantToTrigger" class="full-width"
                    required> </mat-select>

У меня должно быть несколько опций в mat-select, но если есть только одна опция, я хочу выбрать это значение по умолчанию, и мне нужно знать это значение, которое выбрано для получения некоторых данных из базы данных.я делаю что-то вроде этого:

if (this.array.length == 1){ // if it has only one option
        this.object.attribute = this.array[0];
}

, но это приводит к некоторым ошибкам или сбоям.

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

Поскольку у вас есть 2-стороннее связывание данных с [(ngModel)], вы можете использовать (ngModelChange) вместо (change).Он срабатывает, когда значение меняется.это пример stackblitz

0 голосов
/ 22 ноября 2018

Это потому, что mat-select имеет событие selectionChange, и оно запускается только тогда, когда user меняет его

Событие, генерируемое, когда выбранное значение было изменено пользователем.( угловой материал документов )

Если вы хотите испустить это selectionChange, вам придется попробовать запрограммированное событие огня, но вам следует избегать его.Может быть, вы можете вызвать этот метод внутри вашего кода?Дайте нам ваш вариант использования, может быть, есть лучший способ.

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

Из-за вашего варианта использования, вы можете пойти с ChangeDetectorRef.detectChanges(), так что, в основном, если вы установите значение по умолчанию иВы хотите быть уверены, что он выбран в пользовательском интерфейсе, вы можете сделать что-то вроде этого.Это немного странно, но это будет работать.

if (this.array.length == 1){ // if it has only one option
        this.object.attribute = this.array[0];
        // this will force to refresh value in mat-select
        this.cdr.detectChanges()
        // here you can call your `methodThatIWantToTrigger` becaucse the view is updated.
}

Также не забудьте добавить его в constructor в component.ts и импортировать. Изменить

import { ChangeDetectorRef } from '@angular/core';    

constructor(private cdr: ChangeDetectorRef) { }
...