Почему метод соединения Angular Table Table Schematic работает с данными исходного массива дважды? - PullRequest
0 голосов
/ 02 июля 2019

Команда ng generate @angular/material:material-table --name=data-table генерирует метод connect(), который выглядит следующим образом:

  /**
   * Connect this data source to the table. The table will only update when
   * the returned stream emits new items.
   * @returns A stream of the items to be rendered.
   */
  connect(): Observable<DataTableItem[]> {
    // Combine everything that affects the rendered data into one update
    // stream for the data-table to consume.
    const dataMutations = [
      observableOf(this.data),
      this.paginator.page,
      this.sort.sortChange
    ];

    return merge(...dataMutations).pipe(map(() => {
      return this.getPagedData(this.getSortedData([...this.data]));
    }));
  }

Я не совсем уверен, что именно это делает, но оно переходит в this.data при слиянии, а также getSortedData(). Кажется, он выполняет одну и ту же работу дважды? Просто интересно, что делает реализация и есть ли более эффективный способ сделать это?

Например, может ли реализация connect не просто сначала: - отсортировать массив - нарезать результат сортировки, чтобы получить страницу - Вернуть заметную страницу?

Неясно, какова цель слияния.

1 Ответ

1 голос
/ 02 июля 2019

Слияние генерируется, когда излучается любая из трех наблюдаемых в нем функций, функция map игнорирует любое значение, сгенерированное слиянием, поэтому любой, кто написал это, использовал его только для создания генератора событий, который срабатывает, когда изменяется paginator или sort.Без observableOf (this.data) он не будет выдавать первое значение, но, видя, что он игнорирует параметры, которые observableOf / of могли бы содержать что-либо, или они могли бы использовать startWith.

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