ссылке?:
я пробросила сервис с interval(1000) через директиву и по разному подключила ее к компоненту:
тут я попыталась воспроизвести утечку (специально не отписывалась).
если открыть консоль и покликать по кнопке change component то видно прошлый и новый счетчик
В этом варианте я знаю как можно отписаться, чтобы утечки не было
https://stackblitz.com/edit/stackblitz-starters-61lsem?description=An%20angular-cli%20project%20based%20on%20@angular/animations,%20@angular/common,%20@angular/compiler,%20@angular/core,%20@angular/forms,%20@angular/platform-browser,%20@angular/platform-browser-dynamic,%20@angular/router,%20core-js,%20rxjs,%20tslib%20and%20zone.js&file=src%2Fcomponents%2Fpage-one%2Fpage-one.component.ts,src%2Fdirectives%2Ftest.directive.ts,src%2Fcomponents%2Fpage-one%2Fpage-one.component.html&title=Angular%20Starter
а тут явной подписки нет, директива и сервис те же, только данные получаю через template
если по кнопке покликать то счетчик останавливается и заново начинается
https://stackblitz.com/edit/stackblitz-starters-obfsmu?file=src%2Fcomponents%2Fpage-one%2Fpage-one.component.ts,src%2Fcomponents%2Fpage-one%2Fpage-one.component.html
опыта у меня не много, но есть предположение, что подписка произошла когда мы добавили директиву в модуль и ангуляр сформировал компонент, ну а отписка произошла во время уничтожения
ну как минимум директивы так не юзают, их юзают в шаблонах и в провайдерах не регают
это для эксперимента, сделано, чтоб утечку увидеть (Т.е для меня)
ух я даже не знал что на <div (test)="onTest($event)"> может повесится директива с [test] селектором в общем, во первых в директиве в качестве output должен быть EventEmitter а не observable но это не так важно, но суть в том что ангулар сам подписывается и отписывается когда надо от EventEmitter (который под капотом тоже observable) поздравляю вы смогли создать лютый хак который еще и работает
лютый хак это же не очень хорошо я теперь в сомнениях, лучше делать явно и понятно, вот подписались, вот отписались, все все видят рады и счастливы но тут так удобно пробрасываются значения, что жалко все портить≥≥≥
А ты понял, почему вообще это работает?
Поделись мыслями
так уточните какой момент непонятен
Каким образом компонент связывается с директивой?
почему?
у меня оно не всегда срабатывало. надежней аттрибут отдельно и аутпут отдельно
А можешь наиграть кейс, когда не срабатывало?
это из экспериментов в последнии года три. сейчас я врядли воспроизведу
Переопределение дефолтных вещей не очень хорошо, особенно в командной работе
А где селектор? Я кроме (test) ничего не увидел. Это ж не должно быть валидной записью
Обсуждают сегодня