Size: a a a

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

2019 November 29

OS

Oleg Safonov in Angular - русскоговорящее сообщество
Vladimir Chekushkin
Привет, ребят, ни у кого не было такого, что сайт не рендерится, пока не кликнешь в любом месте, или не уберешь фокус с окна, а потом возвращается обратно.

До этого сайт просто висит. <app-root></app-root> висит пустой
наверное click запускает changeDetection и всё обновляется.
Покажите код главного компонента, например
источник

VC

Vladimir Chekushkin in Angular - русскоговорящее сообщество
Oleg Safonov
наверное click запускает changeDetection и всё обновляется.
Покажите код главного компонента, например
export class AppComponent implements OnInit {
 public loaderVisible = false;

 constructor(private loaderService: LoaderService,
             private cdRef: ChangeDetectorRef) {
 }

 ngOnInit() {
   this.loaderService.loaderState.subscribe((result: boolean) => {
     this.loaderVisible = result;
     this.cdRef.detectChanges();
   });
 }
}
источник

OS

Oleg Safonov in Angular - русскоговорящее сообщество
Vladimir Chekushkin
export class AppComponent implements OnInit {
 public loaderVisible = false;

 constructor(private loaderService: LoaderService,
             private cdRef: ChangeDetectorRef) {
 }

 ngOnInit() {
   this.loaderService.loaderState.subscribe((result: boolean) => {
     this.loaderVisible = result;
     this.cdRef.detectChanges();
   });
 }
}
а loaderVisible где используется?
источник

VC

Vladimir Chekushkin in Angular - русскоговорящее сообщество
Oleg Safonov
а loaderVisible где используется?
а шаблоне app.component.html

<app-loader type="fixed" view="circle" *ngIf="loaderVisible"></app-loader>
источник

OS

Oleg Safonov in Angular - русскоговорящее сообщество
лучше сделать в компонент
loaderVisible$: Observable<boolean> = this.loaderService.loadState;

и в шаблон через asyncPipe вывести
*ngIf="loaderVisible$ | async"

Я к сожалению не знаком сильно с механизмом отслеживания изменений, так что помочь не факт, что  смогу)


Но без необходимости changeDetectorRef имхо лучше не использовать
источник

VC

Vladimir Chekushkin in Angular - русскоговорящее сообщество
Oleg Safonov
лучше сделать в компонент
loaderVisible$: Observable<boolean> = this.loaderService.loadState;

и в шаблон через asyncPipe вывести
*ngIf="loaderVisible$ | async"

Я к сожалению не знаком сильно с механизмом отслеживания изменений, так что помочь не факт, что  смогу)


Но без необходимости changeDetectorRef имхо лучше не использовать
Понял, спасибо, обязательно проверю, точно ли из-за этого. Просто я заметил, что такое появилось после обновления одной библиотеки. И как только я откатываю её версию - работает без проблем. Накатываю новую - ломается
источник

NK

Nikolai Kovalenko in Angular - русскоговорящее сообщество
https://medium.com/@samichkhachkhi/faster-apps-with-json-parse-9759ef9efce
почему-то не нашёл, можно ли сделать такую оптимизацию для ангуляра при сборке. Чтобы контанты упаковывались в JSON.parse
источник

VP

Victor Protsenko in Angular - русскоговорящее сообщество
Добрый день. у меня вопрос по rxjs switchMap. Как я понял, switchMap не комплитит Observable, который она выдавала в прошлый раз, а лишь отписывается от него. Как  я могу всё же комплитить предыдущий observable, который эта switchMap выдавала в прошлы раз?
источник

YS

Yuri Stepanov in Angular - русскоговорящее сообщество
Vladimir Chekushkin
export class AppComponent implements OnInit {
 public loaderVisible = false;

 constructor(private loaderService: LoaderService,
             private cdRef: ChangeDetectorRef) {
 }

 ngOnInit() {
   this.loaderService.loaderState.subscribe((result: boolean) => {
     this.loaderVisible = result;
     this.cdRef.detectChanges();
   });
 }
}
попробуй markForCheck
источник

Вキ

Вертихвост キバ in Angular - русскоговорящее сообщество
Victor Protsenko
Добрый день. у меня вопрос по rxjs switchMap. Как я понял, switchMap не комплитит Observable, который она выдавала в прошлый раз, а лишь отписывается от него. Как  я могу всё же комплитить предыдущий observable, который эта switchMap выдавала в прошлы раз?
Он сам должен комплититься, если от него отписались
источник

YS

Yuri Stepanov in Angular - русскоговорящее сообщество
Oleg Safonov
лучше сделать в компонент
loaderVisible$: Observable<boolean> = this.loaderService.loadState;

и в шаблон через asyncPipe вывести
*ngIf="loaderVisible$ | async"

Я к сожалению не знаком сильно с механизмом отслеживания изменений, так что помочь не факт, что  смогу)


Но без необходимости changeDetectorRef имхо лучше не использовать
changeDetector использовать вполне легально с onPush стратегией
источник

VP

Victor Protsenko in Angular - русскоговорящее сообщество
Вертихвост キバ
Он сам должен комплититься, если от него отписались
у меня специфика такая, что это был Subject (обертка над вебсокетным соединением). И как можно догадаться, это у меня реконнект)
источник

OS

Oleg Safonov in Angular - русскоговорящее сообщество
Yuri Stepanov
changeDetector использовать вполне легально с onPush стратегией
Я знаю) поэтому и написал
Но без необходимости changeDetectorRef имхо лучше не использовать

Если можно сделать async pipe в данном случае, то лучше через него
источник

YS

Yuri Stepanov in Angular - русскоговорящее сообщество
тут секта любителей Асинк пайпа?:) это неудобно
источник

AL

Artem Laschenkov in Angular - русскоговорящее сообщество
Парни кто подскажет как обновить компонент без перезагрузки? чет гугл мучаю не фига он ничего дельного не выдает
источник

Вキ

Вертихвост キバ in Angular - русскоговорящее сообщество
Victor Protsenko
у меня специфика такая, что это был Subject (обертка над вебсокетным соединением). И как можно догадаться, это у меня реконнект)
Там где создаётся Subject, можно добавить tear down, и обрабатывать там завершение потока
источник

AP

Andrey Petrov in Angular - русскоговорящее сообщество
Yuri Stepanov
тут секта любителей Асинк пайпа?:) это неудобно
Асинк как презерватив. С ним не так удобно, но надёжнее
источник

OS

Oleg Safonov in Angular - русскоговорящее сообщество
Yuri Stepanov
тут секта любителей Асинк пайпа?:) это неудобно
почему?
источник

OS

Oleg Safonov in Angular - русскоговорящее сообщество
Andrey Petrov
Асинк как презерватив. С ним не так удобно, но надёжнее
да ладно, всему свой инструмент
источник

YS

Yuri Stepanov in Angular - русскоговорящее сообщество
потому что если у тебя будет 20 обсерваблов, то нужно будет городить 20 пайпов (если нужна какая то логика в пайпе)
источник