ужас ужасный работать с интефейсом не так, как дали разработчики ангуляра.
Я использую подход функции tuiQueryListChanges из taiga ui
/**
* Extracts original array from {@link QueryList} rather than
* creating a copy like {@link QueryList.toArray} does.
* @param queryList
* @returns original array from {@link QueryList}.
*/
export function tuiGetOriginalArrayFromQueryList<T>(
queryList: QueryList<T>,
): readonly T[] {
let array: readonly T[] = [];
queryList.find((_item, _index, originalArray) => {
array = originalArray;
return true;
});
return array;
}
/**
* Converts changes observable of a QueryList to an Observable of arrays
*/
export function tuiQueryListChanges<T>(
queryList: QueryList<T>,
): Observable<readonly T[]> {
return queryList.changes.pipe(
startWith(null),
map(() => tuiGetOriginalArrayFromQueryList(queryList)),
);
}
Пример использования этого tuiQueryListChanges на компоненте аккордеона
https://github.com/taiga-family/taiga-ui/blob/95ae668e11add63d310740509101ae5d5227128f/projects/kit/components/accordion/accordion.component.ts
Мне же нравится подход тайги, работать с потоком, который работает по типу BehaviourSubject и отдаёт реальный массив компонентов, а не подобие массива.
Основное недовольство в функции tuiGetOriginalArrayFromQueryList, что она вытаскивает исходный массив наружу для взаимодействия.
Здесть есть разрабы из Тинькофф, кстати?
полно :)
Меня заставляют отказаться от этого, а я не хочу 😢
я не до конца понял - а чем копия данных возвращаемая от QueryList.toArray не подходит?
Обсуждают сегодня