У меня есть компонент боковой панели и компонент страницы.
Компонент боковой панели имеет @ViewChild, который является ngbAccordion из Угловой бустерп. Я хочу вызвать его метод collapseAllиз компонента страницы.
Итак, боковая панель имеет
@ViewChild('webAccordion', { static: false })
webAccordion: NgbAccordion;
@ViewChild('pageAccordion', { static: false })
pageAccordion: NgbAccordion;
collapseAllAccordions() {
this.webAccordion.collapseAll();
this.pageAccordion.collapseAll();
}
Когда загружается компонент «страница», я хочу передать событие компоненту «боковой панели», которое запускает мою функцию collapseAllAccordions.
Я знаю, как это сделать с родительскими/дочерними компонентами, и большинство вещей, которые я могу найти в Google, и здесь, на SO, обсуждают родительские/дочерние ситуации. За исключением того, что в моем случае это компоненты брат или сестра. Я не знаю, как обращаться с братьями и сестрами.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете использовать промежуточный одноэлементный сервис между этими компонентами и делиться данными/действиями. Например,
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-sidebar',
templateUrl: './sidebar.component.html',
styleUrls: ['./sidebar.component.scss']
})
export class SideBarComponent implements OnInit {
constructor(private service: AppService) { }
onClick() {
this.service.collapse();
}
ngOnInit(): void { }
}
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-page',
templateUrl: './page.component.html',
styleUrls: ['./page.component.scss']
})
export class PageComponent implements OnInit {
constructor(private service: AppService) {
// Create a observable object which listens to service and
// change the behaviour of current page component and vice versa
}
ngOnInit(): void { }
}
Если вам нужна дополнительная помощь, создайте stackblitz или codeandbox, чтобы воспроизвести эту проблему.
Вы можете воспользоваться услугой:
collapseAllAccordions.Я, скорее всего, воспользуюсь этим musttoknow.com/… Спасибо.
Вы можете создать stackblitz или codeandbox, чтобы воспроизвести эту проблему?