Как передать элементы действий от дочернего элемента к родительскому?

У меня есть родительский компонент, который отображает несколько различных типов дочерних компонентов на основе типов моделей данных.

Кроме того, конструкция требует, чтобы родительский элемент содержал элементы действий, которые выполняются с данными дочерних компонентов, и эти действия зависели от типов дочерних компонентов.

У действий есть две вещи: значок, обозначающий тип действия, и функция-обработчик. Функция-обработчик находится в дочернем компоненте.

Как предоставить родительскому элементу все действия для определенного типа компонента chils?

Единственный способ, который я могу придумать, - это заставить все дочерние компоненты реализовывать интерфейс с помощью:

  1. свойство, представляющее действия, которые могут быть выполнены (значок и ключ события)
  2. входная переменная, в которой должно быть выполнено действие по клику

Есть ли более элегантный способ добиться этого?

🤔 А знаете ли вы, что...
Angular имеет собственную систему маршрутизации для управления переходами между страницами в одностраничных приложениях.


50
1

Ответ:

Решено

Родитель может знать все о дочерних элементах, используя ссылочную переменную шаблона.

<button (click) = "child.doSomething('accion')"> //<--doSomething is defined in child
</button>
<child #child></child>

Вы также можете использовать viewChild, и, как вы говорите, все дочерние элементы «расширяются» из интерфейса, вы можете использовать

@ViewChild('child',{read:CommonInterface}) component!:CommonInterface

click(){
 this.component.doSomething('accion')
}

Вы также можете использовать тему в родительском компоненте и подписаться на все дочерние компоненты.


Интересные вопросы для изучения

Angular: прокрутите страницу до раздела загрузки страницы при переходе к определенному фрагменту URL-адресаКак обмениваться данными между (несколько экземплярами) двух несвязанных компонентов?Как правильно расположить фиксированную панель навигации при прокрутке к разделам с одинаковым идентификатором в Angular?Ошибка TS1383: только именованный экспорт может использовать «тип экспорта»Angular Material 18: как изменить цвет фона?Почему проблема NullInjectionError не решена путем добавления ProvideHttpClient() в файл app.config Angular 18Правильно отформатируйте разделитель тысяч без регулярного выраженияCSS и JavaScript не применяются правильно после переноса содержимого HTML в компонент приложения Angular из-за проблем с инкапсуляцией просмотра и порядком загрузки скриптовКак применить canActivateFn ко всем маршрутам в автономном приложении Angular?Angular и Bootstrap — Маршруты