Angular: динамически помещать данные в наблюдаемые без изменения значения на входе.

Я использовал матовое автозаполнение с материалом Angular 7.

this.salesPickerAutoComplete$ = this.autoCompleteControl.valueChanges.pipe(
  startWith(''),
  debounceTime(400),
  distinctUntilChanged(),
  switchMap(value => {
    if (value && value.length > 2) {
      return this.getSalesReps(value);
    } else {
      return of(null);
    }
  })
);

getSalesReps(value: string): Observable<any[]> {
  const params = new QueryDto;
  params.$filter = `substringof('${value}',FirstName) or substringof('${value}',LastName)`;
  params.$select = "UserId,FirstName,LastName,Username";
  return from(this.salesRepresentativesService.GetSalesRepresentatives(params))
    .pipe(
      map(response => response.Data),
      catchError(() => { return of(null) })
    );
}

Он отлично работает с поиском, введя ввод.

Моя проблема в том, что я хочу, чтобы список автоматически заполнялся без ввода некоторых конкретных функций, таких как заполнение списка при загрузке некоторыми элементами.

Может ли кто-нибудь сказать мне, как я могу это сделать? Как я могу динамически нажимать/изменять некоторые элементы в mat-autocomplete?

Ниже приведен HTML, в котором я связываю данные

<mat-form-field floatLabel="never">
  <input matInput aria-label="salesRepresentative" type="text" [placeholder]="translationObj.startTypingPlaceholder" autocomplete="off"
    [formControl]="autoCompleteControl" [matAutocomplete]="auto">
  <mat-icon matSuffix class="cursor-pointer">search</mat-icon>
  <mat-autocomplete #auto="matAutocomplete" [displayWith]="createSalesRepString">
    <mat-option *ngFor="let item of salesPickerAutoComplete$ | async;" [value]="item">
      {{item.FirstName}} {{item.LastName}} - (Username: {{item.Username}})
    </mat-option>
  </mat-autocomplete>
</mat-form-field>

person Ankur Akvaliya    schedule 01.04.2019    source источник
comment
Ваш вопрос вводит в заблуждение. Вы хотите открыть автозаполнение динамически?   -  person Jeba Prince    schedule 01.04.2019
comment
Не могли бы вы добавить код, в котором вы связываете/используете данные для автозаполнения? Я не совсем понимаю, о чем вы спрашиваете. Вы хотите автоматически заполнять элементы в автозаполнении?   -  person Arikael    schedule 01.04.2019
comment
Да. Для редактирования я хочу автоматически заполнять элемент динамически и устанавливать выбранный элемент без ввода автозаполнения   -  person Ankur Akvaliya    schedule 01.04.2019
comment
@JebaPrince Я хочу добавлять элементы в массив / элементы автозаполнения в режиме редактирования.   -  person Ankur Akvaliya    schedule 01.04.2019
comment
Вы можете также добавить свой HTML-код?   -  person Jeba Prince    schedule 01.04.2019
comment
Я отредактировал свой пост и добавил html-код   -  person Ankur Akvaliya    schedule 01.04.2019
comment
@AnkurAkvaliya проверь мой ответ   -  person Jeba Prince    schedule 01.04.2019


Ответы (1)


Чтобы установить значение по умолчанию, вам нужно установить значение в поле ввода.

<input matInput aria-label="salesRepresentative" type="text" [placeholder]="translationObj.startTypingPlaceholder" autocomplete="off"
    [formControl]="autoCompleteControl" [matAutocomplete]="auto" [(ngModel)]="selectedValue">

Пример:

https://stackblitz.com/edit/angular-kmffbi

person Jeba Prince    schedule 01.04.2019
comment
У меня нет одного массива строк. Это будет работать с массивом строк, потому что, когда вы добавляете строку по умолчанию, она вызывает поиск, и список будет заполнен. Я использую массив объектов с функцией displayWith. По-вашему, в моем случае пользователю придется выбирать из списка после завершения вызова. - person Ankur Akvaliya; 01.04.2019
comment
@AnkurAkvaliya Я также обновил свой код для массива объектов. - person Jeba Prince; 01.04.2019