Size: a a a

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

2021 March 19

SS

Sergei Sergeevich in Angular - русскоговорящее сообщество
Всем привет! кто-нибудь тестировал NGXS Action Handlers? не очень понимаю как можно затриггерить ofActionSuccessful без диспатча.
@Component({ ... })
export class CartComponent {
 constructor(private actions$: Actions) {}

 ngOnInit() {
   this.actions$.pipe(ofActionSuccessful(CartDelete)).subscribe(() => alert('Item deleted'));
 }
}
источник

SS

Sergei Sergeevich in Angular - русскоговорящее сообщество
Sergei Sergeevich
Всем привет! кто-нибудь тестировал NGXS Action Handlers? не очень понимаю как можно затриггерить ofActionSuccessful без диспатча.
@Component({ ... })
export class CartComponent {
 constructor(private actions$: Actions) {}

 ngOnInit() {
   this.actions$.pipe(ofActionSuccessful(CartDelete)).subscribe(() => alert('Item deleted'));
 }
}
возникает мысль подменить component.actions$ на Subject и что то туда пушить только не совсем понятно что =)
источник

SV

Sergey Vakhramov in Angular - русскоговорящее сообщество
Вертихвост キバ 🏡🦊
Просто строки использовать не стоит.

Для быстрого резолвинга зависимостей, Angular использует под капотом использует bloom filters. Поэтому каждый InjectionToken и или @Injectable класс имеет свое инкрементальное значение, которые используется для этого фильтра.

☝️ это вкратце подкапотно ответ на вопрос "почему так?"

вот тут подробнее как работает bloom filters https://t.me/angular_fox/46
источник

AK

Aleksey Kap in Angular - русскоговорящее сообщество
Всем привет. Может у кого-нибудь есть на примете статья по техникам поиска источников проблем с производительностью в Angular.
Проблема такая, есть компонент с довольно большой вложенностью компонентов, в том числе ngfor внутри ngfor. При определенном количестве элементов компонент начинает жутко тормозить(ввод каждой буквы в текстовое поле может занимать по паре секунд.).
Что уже пробовал сделать: В компоненте ставил стратегию onPush(в моем представлении это должно было убрать тормоза, пусть и поломать работу), но тормоза не ушли.  
Прошелся по вложенным компонентам, убрал все места с инпут биндингами на функции и геттеры.
Для ngFor задал trackByFn
Что еще может быть причиной постоянного ререндера компонента и как эту проблему локализовать?
источник

OS

Oleg Safonov in Angular - русскоговорящее сообщество
Aleksey Kap
Всем привет. Может у кого-нибудь есть на примете статья по техникам поиска источников проблем с производительностью в Angular.
Проблема такая, есть компонент с довольно большой вложенностью компонентов, в том числе ngfor внутри ngfor. При определенном количестве элементов компонент начинает жутко тормозить(ввод каждой буквы в текстовое поле может занимать по паре секунд.).
Что уже пробовал сделать: В компоненте ставил стратегию onPush(в моем представлении это должно было убрать тормоза, пусть и поломать работу), но тормоза не ушли.  
Прошелся по вложенным компонентам, убрал все места с инпут биндингами на функции и геттеры.
Для ngFor задал trackByFn
Что еще может быть причиной постоянного ререндера компонента и как эту проблему локализовать?
Попробуйте в консоли хрома выставить флаг подсветки перерисовки. Если на каждый чих перерисовывается весь DOM - можно будет это чинить
источник

YV

Yurii Veselov in Angular - русскоговорящее сообщество
Виртуал скролл посмотри
источник

AK

Aleksey Kap in Angular - русскоговорящее сообщество
Oleg Safonov
Попробуйте в консоли хрома выставить флаг подсветки перерисовки. Если на каждый чих перерисовывается весь DOM - можно будет это чинить
Ого не знал о таком флаге, подскажите где он находится
источник

OS

Oleg Safonov in Angular - русскоговорящее сообщество
Aleksey Kap
Ого не знал о таком флаге, подскажите где он находится
More tools -> Animations > Paint Flashing
источник

AK

Aleksey Kap in Angular - русскоговорящее сообщество
Oleg Safonov
More tools -> Animations > Paint Flashing
ага спасибо, только в Rendering. Хм результат странный, перерисовываются только поля ввода, да и как бы все-таки пои действия помогли на всех остальных элементах компонента(дропдауны, чекбосы), но именно ввод в <input> вызывает жуткие лаги
источник

AK

Aleksey Kap in Angular - русскоговорящее сообщество
и <textarea>
источник

SV

Sergey Vakhramov in Angular - русскоговорящее сообщество
Может у вас на ngModel геттеры-сеттеры стоят? которые циклично себя вызывают
источник

AK

Aleksey Kap in Angular - русскоговорящее сообщество
Sergey Vakhramov
Может у вас на ngModel геттеры-сеттеры стоят? которые циклично себя вызывают
да нет, это вычистил. Нашел причину на всех textarea стоит HostListener на mousemove  и другие события, нужно было не только текстовыми полями проверять
источник

SS

Sergei Sergeevich in Angular - русскоговорящее сообщество
Sergei Sergeevich
возникает мысль подменить component.actions$ на Subject и что то туда пушить только не совсем понятно что =)
Проблема решена:
  it('should load contacts if one created', () => {
   spyOn(component, 'load');
   const ctx: ActionContext = {
     status: ActionStatus.Successful,
     action: ContactCreateAction,
   };
   actions.next(ctx);
   expect(component.load).toHaveBeenCalled();
 });
источник

AK

Aleksey Kap in Angular - русскоговорящее сообщество
спасибо за помощь
источник

AK

Aleksey Kap in Angular - русскоговорящее сообщество
а никто не сталкивался с проблемой, что если на странице больше 50 элементов textarea, то ввод в каждую из них очень сильно лагает. Причем не важны ни биндинги не директивы ни стили, даже если вставить пустую <teaxtarea></textarea> то все равно она лагает
источник

OD

Oleg Dovbysh in Angular - русскоговорящее сообщество
Aleksey Kap
а никто не сталкивался с проблемой, что если на странице больше 50 элементов textarea, то ввод в каждую из них очень сильно лагает. Причем не важны ни биндинги не директивы ни стили, даже если вставить пустую <teaxtarea></textarea> то все равно она лагает
стратегию может поменять?
источник

AK

Aleksey Kap in Angular - русскоговорящее сообщество
OnPush стоит
источник

OS

Oleg Safonov in Angular - русскоговорящее сообщество
Aleksey Kap
а никто не сталкивался с проблемой, что если на странице больше 50 элементов textarea, то ввод в каждую из них очень сильно лагает. Причем не важны ни биндинги не директивы ни стили, даже если вставить пустую <teaxtarea></textarea> то все равно она лагает
С пустыми на stackblitz работает
https://stackblitz.com/edit/angular-basmzg?file=src%2Fapp%2Fapp.component.html

Ищите локально проблему
источник

С

Сергей А in Angular - русскоговорящее сообщество
Привет, почему выдает ошибку?
any
Property 'tap' does not exist on type 'TileSchoolComponent'.

🙏
источник

OS

Oleg Safonov in Angular - русскоговорящее сообщество
Сергей А
Привет, почему выдает ошибку?
any
Property 'tap' does not exist on type 'TileSchoolComponent'.

🙏
Без this, просто tap
источник