@TheGuy33

Как вызвать метод одного компонента из другого в Angular?

1) data-table-component - отрисовывает грид
2) filter-data-component - отображает множество фильтров и собирает их в единую модель

Задача: находясь в компоненте filter-data-component вызвать метод компонента data-table-component loadGridItemsFromApi(filterModel) и передать параметром модель фильтров, собранную в filter-data-component.
Метод loadGridItemsFromApi(filterModel) пошлёт запрос на сервер, и сервер вернёт отфильтрованные данные для таблицы.

Неудачная попытка: изначально хотел объявить DataTableComponent в app.module.ts в NgModule Providers, а потом заинжектить в конструктор filter-data-component.
Когда я так сделал, то выяснил, что "заинжектил" в filter-data-component новый экзмемпляр класса DataTableComponent (что нежелаемо).
При попытке вызвать у этого "заинжекшенного" DataTableComponent метод loadGridItemsFromApi(filterModel) не отрабатывает http запрос, реализованный в этом методе.
Метод вызывается, запрос формируется, но не приходит на сервер. Ошибок не показывает.

Вопроса 3:
1) Как зарегистрировать DataTableComponent как синглтон, чтобы можно было инжектить его в другие компоненты?
2) Почему, в данном конкретном случае, не отправляется запрос на сервер, ведь метод DataTableComponent loadGridItemsFromApi(filterModel) вызывается и http запрос формируется?
(этот же метод вызывается а конструкторе data-table-component и, при старте аппликации, запрос на сервер приходит)
3) Как корректно можно решить эту задачу?

С Angular столкнулся впервые, до этого фронтенда практически не касался, не исключаю фундаментального непонимания происходящего.

Прошу подсказать ответы или поделиться подходящими, для решения моей проблемы, материалами
  • Вопрос задан
  • 123 просмотра
Решения вопроса 1
Xuxicheta
@Xuxicheta Куратор тега Angular
инженер
Получать инстансы компонентов можно
1. Нижележащего через декораторы ViewChild, ContentChild и т.п.
2. Вышележащий через инжект в конструкторе. Провайдить его никуда не надо, он будет сам получен из дерева вью-инжекторов.

Но ваш вопрос ващет решается хранением данных в сервисе, а не в компоненте. В сервисе лежит модель данных, компоненты только рисуют.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы