Результат не отображается в автозаполнении (Angular) - PullRequest
0 голосов
/ 05 апреля 2019

Я использую ng-prime <p-autocomplete> для отображения значений через поиск в фоновом режиме

вот мой HTML

<p-autoComplete [(ngModel)]="agent" [suggestions]="filteredAgents" name="agents" (completeMethod)="filterAgents($event)"  [size]="10"
                    placeholder="Agents" [minLength]="3"></p-autoComplete>

В component.ts я инициализирую массив следующим образомпри запуске компонента

filteredAgents: string[] = [];

и у меня есть метод для отправки запроса на сервер и отправки его в массив

 filterAgents(event) {
    let query = event.query;
    this._agentsService.getAgentSearch(query).subscribe(result => {
      result.items.forEach((value) => {
            this.filteredAgents.push(value.name);
            console.log(this.filteredAgents);
       });
    });
}

Я вижу отфильтрованное значение в консоли, но я нея не вижу этого в предложениях.

Где может быть моя проблема?

Ответы [ 2 ]

1 голос
/ 05 апреля 2019

AutoComplete использует проверку на основе установщика или ngDoCheck, чтобы понять, изменились ли предложения для обновления пользовательского интерфейса.Это настраивается с использованием неизменяемого свойства, когда используется включенное (по умолчанию) обнаружение на основе установки, поэтому ваши изменения, такие как добавление или удаление записи, всегда должны создавать новую ссылку на массив вместо манипулирования существующим массивом, поскольку Angular не вызывает сеттеры, если ссылкане меняется.(Угловая документация)

Array.prototype.push не создает новую ссылку, а скорее изменяет исходный массив.Поэтому вам нужно создать новый.

 filterAgents(event) {
    let query = event.query;
    this._agentsService.getAgentSearch(query).subscribe(result => {
            this.filteredAgents = [...result.items.map(e => e.name)]
        });
    }

Я отобразил результат для извлечения имен.

0 голосов
/ 05 апреля 2019

Если отфильтрованные агенты являются массивом объектов, попробуйте добавить field = "name" к атрибутам директивы.

Здесь name - это поле в объекте.Директива использует это поле для отображения в предложениях

...