Как получить массив json вместо объекта json - PullRequest
0 голосов
/ 04 ноября 2019

Я сделал автозаполнение, и мне потребовался метод массива. Я хочу использовать массив json в качестве моего API вместо объекта json.

Поскольку метод фильтра работает только для массива. Я должен использовать массив json [] в качестве URL-адреса API, но мой API - это объектный файл json {}. Как сделать это как массив? Я попытался с некоторым массивом JSON API. Код работает с массивом json, но не работает с объектом json.

HTML:

         <mat-autocomplete #auto="matAutocomplete" [displayWith]="getOptionText">
          <mat-option *ngFor="let option of (filteredOptions | async)" [value]="option">
            {{ option.make }}
          </mat-option>
         </mat-autocomplete>

TS обслуживания:

@Injectable({
  providedIn: 'root'
})
export class Service {
  constructor(private http: HttpClient) { }

  opts = [];

  getData() {
    return this.opts.length ?
      of(this.opts) :
      this.http.get<any>('https://api.myjson.com/bins/15psn9').pipe(map(data => this.opts = data));
  }
}

TS компонента:

  constructor(private service: Service) { }

  ngOnInit() {
    this.filteredOptions = this.searchForm.controls['customerId'].valueChanges.pipe(
      startWith(''),
      debounceTime(100),
      switchMap(value => value.length >= 3 ? this.doFilter(value) : [])
    );
  }

  doFilter(value) {
    return this.service.getData()
      .pipe(
        map(response => response.filter((option: { make: { toLowerCase: () => { indexOf: (arg0: any) => number; }; }; }) => {
          return option.make.toLowerCase().indexOf(value.toLowerCase()) === 0;
        }))
      );
  }

  getOptionText(option) {
    return option.make;
  }

Я ожидал, что API JSON - это функция массива или автозаполненияработы.

1 Ответ

0 голосов
/ 05 ноября 2019

В вашем Сервисе попробуйте использовать: from вместо of. Проверьте это документы .

Вот рабочий стек на основе вашего кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...