ОШИБКА TypeError: Невозможно прочитать свойство 'name' - Angular Material Table

Предполагая (из вывода вашего кода и того факта, что вы намеренно добавили несколько копий 0, 1 и 2), что вы делаете «перестановки с заменой» или в основном декартовский продукт с требованием 3 Nones, я 'd сделайте что-то вроде:

def tien_gen(size, values, number_of_nones):
    to_fill = size - number_of_nones
    for locs in itertools.combinations(range(size), to_fill):
        for fill_values in itertools.product(values, repeat=to_fill):
            out = [None] * size
            for loc, fill_value in zip(locs, fill_values):
                out[loc] = fill_value
            yield tuple(out)

, которое соответствует вашему выходу:

In [137]: result = list(tien_gen(5, [0,1,2], 3))

In [138]: len(result)
Out[138]: 90

In [139]: result
Out[139]: 
[(0, 0, None, None, None),
 (0, 1, None, None, None),
 (0, 2, None, None, None),
 (1, 0, None, None, None),
 [...]
 (None, 0, None, 1, None),
 (None, 0, None, 2, None),
 (None, 1, None, 0, None),
 [...]
 (None, 2, None, 1, None),
 (None, 2, None, 2, None),
 (None, 0, None, None, 0),
 (None, 0, None, None, 1),
 [...]
 (None, None, None, 1, 2),
 (None, None, None, 2, 0),
 (None, None, None, 2, 1),
 (None, None, None, 2, 2)]

In [140]: orig = [state for state in list(set(it.permutations((None, None, None, 0, 0, 1, 1, 2, 2), 5))) if state.count(None)==3]

In [141]: len(result) == len(orig) and set(result) == set(orig)
Out[141]: True

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

1
задан OneLunch Man 15 February 2019 в 06:57
поделиться

1 ответ

изменил службу:

public getCatalog() {
    console.log(this.catalog);
    return this.catalog;
  }

  loadCatalog() {
    this.fetchCatalog().subscribe(catalog => this.catalog.next(catalog));
  }

  public fetchCatalog(): Observable<Catalog[]> {
    return this.http.get<Catalog>(ZUORA_URL + '/v1/catalog/products?page=1&pageSize=10', { headers })
      .pipe(
        expand(catalog => {
          if (!catalog.nextPage) {
            return EMPTY;
          }
          return this.http.get<Catalog>(ZUORA_URL + catalog.nextPage, { headers });
        }),
        map(catalog => catalog.products),
        reduce((accData, data) => accData.concat(data), []),
      );
  }

добавил фабрику в app.module.ts -> Данные загружаются один раз при сборке приложения -> данные не нужно перезагружать каждый раз, когда пользователь изменяет представление

export function catalogProviderFactory(zuoraService: ZuoraService) {
  return () => zuoraService.loadCatalog();
}

Компонент OnInit для построения таблицы:

  ngOnInit() {
    this.zuoraService.catalog$.subscribe(catalog => {
      this.dataSource = new MatTableDataSource(catalog);
      this.dataSource.paginator = this.paginator;
      this.dataSource.sort = this.sort;
    });
0
ответ дан Malte 15 February 2019 в 06:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: