Я не уверен в мелких деталях, поэтому, возможно, это даже не сработает, но, похоже, для этого должно быть какое-то решение. У меня есть родительский компонент, который использует два дочерних компонента на вкладках, например:
<div class="container" *ngIf="page === 'tab1'">
<refresher-component></refresher-component>
<child-component1></child-component1>
</div>
<div class="container" *ngIf="page === 'tab2'">
<refresher-component></refresher-component>
<child-component2></child-component2>
</div>
Родитель также имеет компонент обновления, который отвечает за обновление данных на обеих вкладках. Каждый из дочерних компонентов внедряет службу, которая реализует интерфейс Refreshable:
- Дочерний компонент 1:
constructor(private service1: Service1)
- Дочерний компонент 2:
constructor(private service2: Service2)
Каждый сервис выглядит следующим образом (замените 1 на 2 для 2-го сервиса):
@Injectable()
export class Service1 implements Refreshable<Type1[]>
refersher-component
выглядит следующим образом:
public constructor(@Inject(RefresherServiceToken) public refreshableService: Refreshable<any>) {
console.log('refreshable', this.refreshableService);
}
Что происходит, когда я загружаю страница (1-я вкладка по умолчанию), console.log
выводит Service1. Однако при переходе на вкладку 2 конструктор вызывается снова, но он также выводит Service1. Поэтому refre sh также делается для данных Service1 и не влияет на Service2.
Это нормальное поведение, потому что маршрут не меняется, и мне нужно что-то добавить для сброса службы? Есть ли простой способ устранить это поведение в целом? (Angular 8)