Автозаполнение материалов Angular не работает должным образом

Я использую автозаполнение Angular Materials для автозаполнения ключевых слов пользователя для поиска более 2,5 миллионов существующих слов в моей базе данных, я также ограничил функцию поиска отображением результатов автозаполнения только до 4-го символа, несмотря на то, что моя страница блокируется после первого введенный пользователем символ, который мне не кажется логичным (если это была проблема с большими данными, она должна была быть после того, как пользователь набрал 4-й символ) вот мой код машинописного текста:

  control = new FormControl();
  filteredWords: Observable<string[]>;
  url = "./assets/existingwords.txt";
  public  words : string[] =[];

  private _filter(value: string): string[] {
    const filterValue = value.toLowerCase().replace(/\s/g, '');
    return this.words.filter(word => word.toLowerCase().replace(/\s/g, '').includes(filterValue));
  }
  ngOnInit() : void  {
    this.filteredWords = this.control.valueChanges.pipe(
        startWith(''),
        map(value => value.length>=4 ? this._filter(value): this.words.slice())
    );
  }

А вот мой HTML-код:

                    <div class = "form-group">
                    <input matInput type = "text" class = "form-control" id = "idWord" [formControl] = "control" [(ngModel)] = "myword" placeholder = "Saisir votre terme ici.." name = "myword" [matAutocomplete] = "auto">
                    <mat-autocomplete #auto = "matAutocomplete">
                        <mat-option *ngFor = "let word of filteredWords | async" [value] = "word">
                          {{word}}
                        </mat-option>
                    </mat-autocomplete>
                    </div>
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
555
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ну, проблема была с моим условием else в лямбда-выражении, именно в этой части кода:

это.words.slice()

который всегда возвращает все мои записи данных, что блокирует автозаполнение материала, когда пользователь вводит менее 4 символов, в противном случае решение состояло в том, чтобы изменить его на:

this.words.slice(0,0)

это означает, что если пользователь вводит менее 4 символов, мы не показываем ему никаких предложений (вы можете изменить аргументы функции slice(), чтобы показать количество предложений, которое вы хотите).

Другие вопросы по теме