Size: a a a

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

2020 March 03

ПА

Попов Алексей... in Angular - русскоговорящее сообщество
Alexander
В сервисе должно быть что-то типа
private shown = new Subject<boolean>()
public isShown() {
return this.shown.asObservable();
}
public show() {
this.shown.next(true);
}
hide() {
this.shown.next(false);
}
Ага, значит в компоненте алерта я подписываюсь, как тогда его проинициализировать алертный компонент, чтобы он слушал сервис
источник

ПА

Попов Алексей... in Angular - русскоговорящее сообщество
ну т.е. чтобы он ngOnInit() выполнил, я там ведь подписываюсь
источник

A

Alexander in Angular - русскоговорящее сообщество
В бутстрапе примерно так:
https://github.com/ng-bootstrap/ng-bootstrap/blob/master/src/modal/modal-stack.ts#L100

Это из сервиса вызывается, да, который инжектится в рут.
https://github.com/ng-bootstrap/ng-bootstrap/blob/master/src/modal/modal.ts
источник

A

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

A

Alexander in Angular - русскоговорящее сообщество
Попов Алексей
Ага, значит в компоненте алерта я подписываюсь, как тогда его проинициализировать алертный компонент, чтобы он слушал сервис
Именно потому что лайфсайклом сложнее управлять
источник

A

Alexander in Angular - русскоговорящее сообщество
Хотя..
источник

ПА

Попов Алексей... in Angular - русскоговорящее сообщество
Такс.... уже что-то проясняется)  Т.е. все таки сервис в этом случае знает о компоненте и аттачит его
источник

ПА

Попов Алексей... in Angular - русскоговорящее сообщество
или я снова не догнал)
источник

ПА

Попов Алексей... in Angular - русскоговорящее сообщество
в этом случае он т.е. в сервисе берет компонент modal-backdrop и аттачит его
источник

ПА

Попов Алексей... in Angular - русскоговорящее сообщество
пзц чет так все сложно, что запутался теперь
источник

A

Alexander in Angular - русскоговорящее сообщество
В этом случае он не то что о нем знает, он его сам создает (через resolveComponentFactory) и управляет его жизненным циклом.
источник

ПА

Попов Алексей... in Angular - русскоговорящее сообщество
Alexander
В этом случае он не то что о нем знает, он его сам создает (через resolveComponentFactory) и управляет его жизненным циклом.
ага, ComponentFactoryResolver мне нужен, через него создаю эту модалку..) управлять жизнью уже второстепенно) главное завести ее сперва)
источник

ПА

Попов Алексей... in Angular - русскоговорящее сообщество
Alexander
В этом случае он не то что о нем знает, он его сам создает (через resolveComponentFactory) и управляет его жизненным циклом.
не пойму как он там его добавляет в dom
let cmpRef = this.componentFactoryResolver.resolveComponentFactory(AlertComponent).create(this.injector);
this.applicationRef.attachView(cmpRef.hostView);

так не катит
источник

ПА

Попов Алексей... in Angular - русскоговорящее сообщество
источник

ПА

Попов Алексей... in Angular - русскоговорящее сообщество
Помогла статейка
источник

ПА

Попов Алексей... in Angular - русскоговорящее сообщество
Alexander
В этом случае он не то что о нем знает, он его сам создает (через resolveComponentFactory) и управляет его жизненным циклом.
спасибо) в нужное русло направили
источник

ДК

Дмитрий Косолапов... in Angular - русскоговорящее сообщество
Подскажите, натолкните на мысль. Функция реализует сброс таймера времни видеозвонка (countdownService.stop()) при обрыве соединения. Подписчик верхнего уровня (nowTimeSubscription) следит за значением таймера, который обновляется раз в секунду, а подписчик нижнего (lastContactTimeSubscription) за временем, которое записывается при получении данных с сервера (раз в 5 секунд). По итогу, если 10 секунд нет соединения, то переключаем индикатор (indicatorConnectionFailure) в true и в html выводим модальное окно (*ngIf="this.chatService.indicatorConnectionFailure"). До этого момента все работает. Но если мы хотим убрать это окно по таймауту (5 сек), появляется эффект мерцания, т.к подписчик постоянно следит за изменениями внутреннего таймера. Возможно можно как-то раскидать эту функцию или при обрыве соединения отписаться от прослушивания, а может можно использовать этих подписчиков параллельно, а не вложено. Помогите советом, заранее спасибо.
источник

E

Eugene in Angular - русскоговорящее сообщество
Дмитрий Косолапов
Подскажите, натолкните на мысль. Функция реализует сброс таймера времни видеозвонка (countdownService.stop()) при обрыве соединения. Подписчик верхнего уровня (nowTimeSubscription) следит за значением таймера, который обновляется раз в секунду, а подписчик нижнего (lastContactTimeSubscription) за временем, которое записывается при получении данных с сервера (раз в 5 секунд). По итогу, если 10 секунд нет соединения, то переключаем индикатор (indicatorConnectionFailure) в true и в html выводим модальное окно (*ngIf="this.chatService.indicatorConnectionFailure"). До этого момента все работает. Но если мы хотим убрать это окно по таймауту (5 сек), появляется эффект мерцания, т.к подписчик постоянно следит за изменениями внутреннего таймера. Возможно можно как-то раскидать эту функцию или при обрыве соединения отписаться от прослушивания, а может можно использовать этих подписчиков параллельно, а не вложено. Помогите советом, заранее спасибо.
подписка внутри подписки - плохо
источник

ДК

Дмитрий Косолапов... in Angular - русскоговорящее сообщество
Eugene
подписка внутри подписки - плохо
Переделал)
источник

ДК

Дмитрий Косолапов... in Angular - русскоговорящее сообщество
Получилось что-то типа такого. Теперь все еще лучше работает, но необходимо всего 5 секунд подержать индикатор в true, а потом перевсти в false. Или вообще не слушать это событие
источник