Size: a a a

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

2021 February 23

BB

Bogdan Bida in Angular - русскоговорящее сообщество
Madiyar
Привет всем. Есть компонент, внутри 2 Чайлд компонента. Когда что то делаю в одном чайлде, то парент сообщает 2-му вызвать его внутреннюю функцию. Но этот 2 чайлд в *ngif и  в доме он не рендерится. Только при клике на переключатель.
Соответственно когда нужен его метод кидает ошибку method of undefined. Ставил в viewchild static false (хотя ангуляр 9). Разное делал не получается. Дайте направление куда копать. Спасибо заранее
Используй сервис, храни там все данные и логику не связанную с отображением
источник

M

Madiyar in Angular - русскоговорящее сообщество
Bogdan Bida
Используй сервис, храни там все данные и логику не связанную с отображением
Я так сделал, с первого чайлда в сервис в сабджект кидал данные при его клике. А потом во втором в какой момент лучше подписаться? В oninit не подойдёт, на onchanges что то не реагирует
источник

AB

Alex Bu in Angular - русскоговорящее сообщество
Madiyar
Я так сделал, с первого чайлда в сервис в сабджект кидал данные при его клике. А потом во втором в какой момент лучше подписаться? В oninit не подойдёт, на onchanges что то не реагирует
Зависит от логики, кмк. Может Вы практический пример предложите, а не абстрактный? А там и решение подыщется)

Что Вы пытаетесь реализовать?
источник

M

Madiyar in Angular - русскоговорящее сообщество
Alex Bu
Зависит от логики, кмк. Может Вы практический пример предложите, а не абстрактный? А там и решение подыщется)

Что Вы пытаетесь реализовать?
В грид компоненте при определенной сортировке, в другом компоненте (фильтр, который в обёртке на ngif) подставить дату начала месяца и отфильтровать. Код внутри фильтра для вызова прописал, но когда до него добирается пишет method of undefined. Но если сперва при загрузке страницы хоть раз переключить фильтр, а потом в нужном ключе отсортировать, то конечно все работает. Но нужно чтобы фильтр даже не отоброжаясь хоть раз должен сработать также
источник

AB

Alex Bu in Angular - русскоговорящее сообщество
Madiyar
В грид компоненте при определенной сортировке, в другом компоненте (фильтр, который в обёртке на ngif) подставить дату начала месяца и отфильтровать. Код внутри фильтра для вызова прописал, но когда до него добирается пишет method of undefined. Но если сперва при загрузке страницы хоть раз переключить фильтр, а потом в нужном ключе отсортировать, то конечно все работает. Но нужно чтобы фильтр даже не отоброжаясь хоть раз должен сработать также
Сложно, почти ничего не понял. Но подозреваю, что навешивать логику ngIf прям на компонент здесь не очень подойдет, так как внутренний код перестанет при false-условии работать полностью

Может попробовать сделать так, чтобы фильтр как компонент жил всегда, а уже внутри него соответствующие виджеты делать видимыми-невидимыми. Тогда жизненный цикл компонента, в том числе его ngOnChanges, будет работать нормально
источник

AB

Alex Bu in Angular - русскоговорящее сообщество
Alex Bu
Сложно, почти ничего не понял. Но подозреваю, что навешивать логику ngIf прям на компонент здесь не очень подойдет, так как внутренний код перестанет при false-условии работать полностью

Может попробовать сделать так, чтобы фильтр как компонент жил всегда, а уже внутри него соответствующие виджеты делать видимыми-невидимыми. Тогда жизненный цикл компонента, в том числе его ngOnChanges, будет работать нормально
На самом деле, выносить логику по фильтрам в сервис, если оба виджета находятся рядом в рамках родительского компонента, кажется оверхедом, кмк. Вполне можно Input + Output комбинациями обойтись. Есть же общее хранилище - родитель
источник

M

Madiyar in Angular - русскоговорящее сообщество
Alex Bu
Сложно, почти ничего не понял. Но подозреваю, что навешивать логику ngIf прям на компонент здесь не очень подойдет, так как внутренний код перестанет при false-условии работать полностью

Может попробовать сделать так, чтобы фильтр как компонент жил всегда, а уже внутри него соответствующие виджеты делать видимыми-невидимыми. Тогда жизненный цикл компонента, в том числе его ngOnChanges, будет работать нормально
там *ngIf на div обертке прописан.
<div *ngIf="shownAnchor=='tasks'">
        <ws-tasks-filter #wsTasksFilter></ws-tasks-filter>
</div>
источник

AB

Alex Bu in Angular - русскоговорящее сообщество
Madiyar
там *ngIf на div обертке прописан.
<div *ngIf="shownAnchor=='tasks'">
        <ws-tasks-filter #wsTasksFilter></ws-tasks-filter>
</div>
Ну это неважно. Всё, что внутри этого ngIf, как раз убивается, если условие false
источник

M

Madiyar in Angular - русскоговорящее сообщество
Я прописал туда и [hidden], [style.visibility] вместо *ngIf, но при @Output() эмиты тоже самое ошибку кидают
источник

AB

Alex Bu in Angular - русскоговорящее сообщество
Madiyar
Я прописал туда и [hidden], [style.visibility] вместо *ngIf, но при @Output() эмиты тоже самое ошибку кидают
Какую ошибку? Скрин есть возможность сделать?
источник

M

Madiyar in Angular - русскоговорящее сообщество
Alex Bu
Какую ошибку? Скрин есть возможность сделать?
ERROR TypeError: Cannot read property 'changeDateFromDone' of undefined

changeDateFromDone - функция фильтра, которая через ViewChild вызывает в родителе, когда от другого чайлда получает Output эмит
источник

AB

Alex Bu in Angular - русскоговорящее сообщество
Madiyar
ERROR TypeError: Cannot read property 'changeDateFromDone' of undefined

changeDateFromDone - функция фильтра, которая через ViewChild вызывает в родителе, когда от другого чайлда получает Output эмит
Ну это не Output кидает ошибку. Это сообщение о том, что вы из undefined пытаетесь считать свойство changeDateFromDone

Вероятно, где-то есть запись "a.changeDateFromDone", которую можно заменить на "a?.changeDateFromDone"
Или "a['changeDateFromDone']" -> "a && a['changeDateFromDone']"
источник

M

Madiyar in Angular - русскоговорящее сообщество
Alex Bu
Ну это не Output кидает ошибку. Это сообщение о том, что вы из undefined пытаетесь считать свойство changeDateFromDone

Вероятно, где-то есть запись "a.changeDateFromDone", которую можно заменить на "a?.changeDateFromDone"
Или "a['changeDateFromDone']" -> "a && a['changeDateFromDone']"
это в парент компоненте. Event приходит true от другого компонента и он пытается вызвать метод changeDateFromDone() из ViewChild. Он кидает ошибку если не ставить ? в конце названия. Но он при любом условии не срабатывает. Кроме если не тыкнуть в этот переключатель фильтра на странице.
источник

AB

Alex Bu in Angular - русскоговорящее сообщество
Madiyar
это в парент компоненте. Event приходит true от другого компонента и он пытается вызвать метод changeDateFromDone() из ViewChild. Он кидает ошибку если не ставить ? в конце названия. Но он при любом условии не срабатывает. Кроме если не тыкнуть в этот переключатель фильтра на странице.
Да, у вас на странице не пристуствует wsTasksFilter. Нужно как-то сделать, чтобы он жил и на него живого смотрел ViewChild. Тогда метод будет, судя по всему
источник

M

Madiyar in Angular - русскоговорящее сообщество
Alex Bu
Да, у вас на странице не пристуствует wsTasksFilter. Нужно как-то сделать, чтобы он жил и на него живого смотрел ViewChild. Тогда метод будет, судя по всему
а как сделать чтобы он жил? ngIf убирал и ставил чисто [hidden], [style.visibility], но чет не помогло
источник

AB

Alex Bu in Angular - русскоговорящее сообщество
Madiyar
а как сделать чтобы он жил? ngIf убирал и ставил чисто [hidden], [style.visibility], но чет не помогло
а если вообще всё убрать, связанное с условным отображением/удалением. Всё равно ошибка?
источник

M

Madiyar in Angular - русскоговорящее сообщество
Alex Bu
а если вообще всё убрать, связанное с условным отображением/удалением. Всё равно ошибка?
тут эти условия еще в ng-template обернуты. А он в onInit парента сетается. Мне нужный - wsTasksFilter
источник

AB

Alex Bu in Angular - русскоговорящее сообщество
Madiyar
тут эти условия еще в ng-template обернуты. А он в onInit парента сетается. Мне нужный - wsTasksFilter
Ну вот из-за этого shownAnchor === 'tasks' как раз иногда и не существуется ссылки на wsTasksFilter. Из-за этого выпадает та ошибка о том, что что-то of undefined
источник

NS

Nikolay Smagin in Angular - русскоговорящее сообщество
У меня есть страница, собранная из компонентов
источник

NS

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