Как вызвать метод одного компонента из другого в 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 столкнулся впервые, до этого фронтенда практически не касался, не исключаю фундаментального непонимания происходящего.
Прошу подсказать ответы или поделиться подходящими, для решения моей проблемы, материалами
Получать инстансы компонентов можно
1. Нижележащего через декораторы ViewChild, ContentChild и т.п.
2. Вышележащий через инжект в конструкторе. Провайдить его никуда не надо, он будет сам получен из дерева вью-инжекторов.
Но ваш вопрос ващет решается хранением данных в сервисе, а не в компоненте. В сервисе лежит модель данных, компоненты только рисуют.