Невозможно вызвать метод компонента-брата напрямую, но есть способ вызвать событие компонента-брата, используя import { BehaviorSubject } from 'rxjs';
Я использую этот подход для передачи данных в одноуровневый компонент, но он также работает, если вы инициируете событие.
Сначала вы создаете сервис, сервис, который я называю его DataService.ts
import { Injectable } from '@angular/core';
import { BehaviorSubject } from 'rxjs';
@Injectable()
export class DataService {
private triggerEventMsg = new BehaviorSubject(false);
triggerEvent = this.triggerEventMsg.asObservable();
constructor() { }
triggerEvent(val: boolean) {
this.messageSource.next(message)
}
}
Теперь один компонент Запускает другой компонент. На данный момент Com1 вызывает событие Com2.
Триггер Com1 DataService triggerEvent с логическим значением pass.
Com1.component.ts
import { Component, OnInit } from '@angular/core';
import { DataService } from "../data.service";
@Component({
selector: 'app-com1',
template: `
{{message}}
<button (click)="newMessage()">New Message</button>
`
})
export class Com1 implements OnInit {
constructor(private data: DataService) { }
ngOnInit() {
}
com1ClickEvent() {
this.data.triggerEvent(true);
}
}
Com2 Наблюдайте эту переменную, когда данные изменяют триггер метода в Компоненте Com2.
Com2.component.ts
import { Component, OnInit } from '@angular/core';
import { DataService } from "../data.service";
@Component({
selector: 'app-com2',
template: `
<p>Com2</p>
`
})
export class Com2 implements OnInit {
constructor(private data: DataService) { }
ngOnInit() {
this.data.triggerEventMsg.subscribe(message => {
// Do What ever you want.
})
}
}