Size: a a a

Angular - русскоговорящее сообщество

2021 February 19

Э

Эмир in Angular - русскоговорящее сообщество
Ilja
ладно . всё завтра . по ощущениям у вас что то напутано . спокойной ночи вам
👍
источник

В

Влад in Angular - русскоговорящее сообщество
Подскажите. Получаю с сервера большой массив данных. Его нужно профильтровать, а затем отсортировать то что осталось. Проблема в том, что данные с сервера приходят с задержкой и функция sort() запускается до того как пришли данные.

Как можно указать порядок выполнения функций?
источник

RY

Roman Yazvinsky in Angular - русскоговорящее сообщество
Влад
Подскажите. Получаю с сервера большой массив данных. Его нужно профильтровать, а затем отсортировать то что осталось. Проблема в том, что данные с сервера приходят с задержкой и функция sort() запускается до того как пришли данные.

Как можно указать порядок выполнения функций?
Вы через httpClient запрос делаете? Если да, то в subscribe
источник

В

Влад in Angular - русскоговорящее сообщество
Roman Yazvinsky
Вы через httpClient запрос делаете? Если да, то в subscribe
да, через httpClient. Я сделал subscribe и там кладу данные в массив. Затем из этого массива нужно вытащить только нужные данные, положить в другой массив, отсортировать и вывести на экран.
И проблема в том, что я получаю белый экран так будто массив пустой.
Видимо сортировка выполняется в тот момент когда массив еще пустой.
Как отложить выполнение до момента когда будут получены данные?
источник

RY

Roman Yazvinsky in Angular - русскоговорящее сообщество
Влад
да, через httpClient. Я сделал subscribe и там кладу данные в массив. Затем из этого массива нужно вытащить только нужные данные, положить в другой массив, отсортировать и вывести на экран.
И проблема в том, что я получаю белый экран так будто массив пустой.
Видимо сортировка выполняется в тот момент когда массив еще пустой.
Как отложить выполнение до момента когда будут получены данные?
Вся логика должна быть в subscribe, по крайней мере методы в нем вызываться.
+ Обычно массиву лучше присвоить начальное значение [], т.к. много чего падает, если он undefined
источник

В

Влад in Angular - русскоговорящее сообщество
Roman Yazvinsky
Вся логика должна быть в subscribe, по крайней мере методы в нем вызываться.
+ Обычно массиву лучше присвоить начальное значение [], т.к. много чего падает, если он undefined
Я присвоил начальное значение. Может тогда у меня плохо построена логика.

Я получаю все данные в app.component, чтобы не дублировать код, а загрузить их только 1 раз при запуске приложения.

Затем в виде home.component хочу выбрать только те данные, которые нужно для этого компонента. Для этого делаю выборку из массива.
Но в итоге массив пустой.  Подскажите как правильно
источник

RY

Roman Yazvinsky in Angular - русскоговорящее сообщество
Влад
Я присвоил начальное значение. Может тогда у меня плохо построена логика.

Я получаю все данные в app.component, чтобы не дублировать код, а загрузить их только 1 раз при запуске приложения.

Затем в виде home.component хочу выбрать только те данные, которые нужно для этого компонента. Для этого делаю выборку из массива.
Но в итоге массив пустой.  Подскажите как правильно
В homeComponent вы в какой момент пытаетесь получить данные? В ngOnInit?
Если вы передаете данные в homeComponent через "@Input", то вам надо следить за изменениями этого инпута. Это либо ngOnChanges, либо сделать
@Input()
set myData(data: Data) {
  this.data = data.sort()....
}
источник

В

Влад in Angular - русскоговорящее сообщество
Roman Yazvinsky
В homeComponent вы в какой момент пытаетесь получить данные? В ngOnInit?
Если вы передаете данные в homeComponent через "@Input", то вам надо следить за изменениями этого инпута. Это либо ngOnChanges, либо сделать
@Input()
set myData(data: Data) {
  this.data = data.sort()....
}
Я создал сервис, который хранит все данные, и в конструкторе homeComponent  написал:
this.ScopesService.findChildScopes(0); - пытаюсь найти из тех данных корневые элементы, и видимо в этот момент данные с сервера еще не пришли, потому что массив пустой
источник

В

Влад in Angular - русскоговорящее сообщество
Прежде чем сортировать, мне нужно извлечь нужные
источник

RY

Roman Yazvinsky in Angular - русскоговорящее сообщество
Влад
Я создал сервис, который хранит все данные, и в конструкторе homeComponent  написал:
this.ScopesService.findChildScopes(0); - пытаюсь найти из тех данных корневые элементы, и видимо в этот момент данные с сервера еще не пришли, потому что массив пустой
Тогда делайте ваш сервис observable, чтоб на него можно было подписаться

Либо сделайте в app.component.html что-то типа
<app-home *ngIf="initialized"></app-home>

Вместо initialized можно написать "!data" или "data.length > 0"
источник

RY

Roman Yazvinsky in Angular - русскоговорящее сообщество
Тогда ваш компонент просто не создастся до тех пор, пока данные не придут
источник

В

Влад in Angular - русскоговорящее сообщество
Roman Yazvinsky
Тогда ваш компонент просто не создастся до тех пор, пока данные не придут
спасибо за подсказку, пойду гуглить 🙂👍
источник

В

Влад in Angular - русскоговорящее сообщество
Подскажите, как отсортировать древовидные данные?

Есть категории, в них есть подкатегории. Уровней вложенности может быть сколько угодно. Нужно отсортировать каждый уровень по полю order_id и вывести на экран.
А исходный массив плоский, в котором указано кто родитель в поле parent_category_id.

Есть какое-то готовое решение?
источник

В

Влад in Angular - русскоговорящее сообщество
Когда я в виде вызываю:
<div class="" *ngFor="let items of ItemService.find(parentID) | keyvalue">
Функция find будет срабатывать заново при каждой итерации? или только при первой?
источник

🏡K

🏡 ILshat Khamitov in Angular - русскоговорящее сообщество
Влад
Когда я в виде вызываю:
<div class="" *ngFor="let items of ItemService.find(parentID) | keyvalue">
Функция find будет срабатывать заново при каждой итерации? или только при первой?
Каждой, но лучше подготовь объект, вместо вызова функции
источник

🏡K

🏡 ILshat Khamitov in Angular - русскоговорящее сообщество
Влад
Подскажите, как отсортировать древовидные данные?

Есть категории, в них есть подкатегории. Уровней вложенности может быть сколько угодно. Нужно отсортировать каждый уровень по полю order_id и вывести на экран.
А исходный массив плоский, в котором указано кто родитель в поле parent_category_id.

Есть какое-то готовое решение?
Куча разных либ в нпм, пойди да поищи сам)

https://www.npmjs.com/package/list-to-tree

Вот например
источник

Д

Дмитрий in Angular - русскоговорящее сообщество
всем привет! подскажите, яндекс метрика умеет воспроизводить посещение на сайте с ангуляром?
источник

АК

Александр Кузнецов... in Angular - русскоговорящее сообщество
Влад
Когда я в виде вызываю:
<div class="" *ngFor="let items of ItemService.find(parentID) | keyvalue">
Функция find будет срабатывать заново при каждой итерации? или только при первой?
Зависит от того как оптимизировано
источник

АК

Александр Кузнецов... in Angular - русскоговорящее сообщество
Влад
Когда я в виде вызываю:
<div class="" *ngFor="let items of ItemService.find(parentID) | keyvalue">
Функция find будет срабатывать заново при каждой итерации? или только при первой?
Стратегия onPush в компоненте то не будет срабатывать постоянно
источник

АК

Александр Кузнецов... in Angular - русскоговорящее сообщество
Влад
Когда я в виде вызываю:
<div class="" *ngFor="let items of ItemService.find(parentID) | keyvalue">
Функция find будет срабатывать заново при каждой итерации? или только при первой?
Но лучше в обьект
источник