Когда мы работаем с Angular и имеем «родительскую» и «дочернюю» модели данных, какую-то информацию обновление которых должна отражаться в «дочерней» модели, мы можем воспользоваться несколькими подходами.
1. Передача данных через свойства:
- Создать свойство в компоненте «родителя» и привязать его к шаблону. Например, parentData: string;
.
- Создать свойство в компоненте «ребенка» и присвоить ему значение, пришедшее из «родителя». Например, @Input() childData: string;
.
- В «родительском» шаблоне передать значение на «ребенка» следующим образом: <app-child [childData]="parentData"></app-child>
.
- Вместилище данного значения будет реализовано с использованием директивы @Input
компонента «ребенка». При обновлении parentData
в «родителе» это значение автоматически обновится и в «ребенке».
2. Использование сервиса:
- Создать сервис и зарегистрировать его в основном модуле приложения (или в модуле компонентов, где происходит работа с данными).
- В сервисе создать свойство для хранения данных, и методы для получения и обновления этих данных.
- В компоненте «родителе» внедрить сервис и использовать его методы для обновления данных: this.service.updateData(newData);
.
- В компоненте «ребенке» также внедрить сервис и вызвать его методы для получения обновленных данных: this.childData = this.service.getData();
.
3. Использование BehaviorSubject:
- Создать новый BehaviorSubject
в сервисе, который будет служить источником данных для «родителя» и «ребенка».
- В «родительском» компоненте внедрить сервис и подписаться на изменения данных: this.service.data.subscribe(updatedData => this.parentData = updatedData);
. При обновлении данных, значение parentData
автоматически обновится.
- В «ребенке» также внедрить сервис и подписаться на изменения данных: this.service.data.subscribe(updatedData => this.childData = updatedData);
. При обновлении данных, значение childData
автоматически обновится.
4. Использование событий:
- Создать событие в сервисе с помощью EventEmitter
или Subject
, которое будет генерироваться при обновлении данных.
- В «родительском» компоненте подписаться на это событие: this.service.dataUpdated.subscribe(updatedData => this.parentData = updatedData);
.
- В компоненте «родителе» обновлять данные и вызывать событие при необходимости: this.service.updateData(newData);
.
- В компоненте «ребенке» также подписаться на событие: this.service.dataUpdated.subscribe(updatedData => this.childData = updatedData);
.