#angular #angular8 #angular10 #angular12
#angular #angular8 #angular10 #angular12
Вопрос:
В моем приложении есть 2 компонента. При нажатии кнопки в одном компоненте я хочу вызвать функцию в другом компоненте. Функция принимает идентификатор в качестве аргумента и нуждается в объекте. Я могу отправить либо идентификатор, либо объект из первого компонента с помощью RXJS, но не оба одновременно. Оба эти компонента являются братьями и сестрами. Вот как выглядит мой код.
КОМПОНЕНТ 1:-
searchObject;
toggle1(id:number){
this.dashboardService.sendToggleEvent(id);
}
Обслуживание:-
sendToggleEvent(id:number){
this.toggleSubject.next(id);
}
getToggleEvent():Observable<any>{
return this.toggleSubject.asObservable();
}
КОМПОНЕНТ 2:-
constructor(){
this.toggleEventSubscription =
this.dashboardService.getToggleEvent().subscribe((id)=>{
this.toggle2(id);
});
}
toggle2(id){
if(id == __){
api(searchObj)
}
у toggle2 есть api, которому нужен объект с именем searchObj, который находится в
Компонент 1.
Я вызываю toggle2 всякий раз, когда вызывается toggle1, и передаю идентификатор, но
не могу передать searchObject.
TIA.
Комментарии:
1. Пожалуйста, опубликуйте код, который вы используете сейчас.
2. может быть, вам подойдет просто вызов функции внутри родительского элемента
<child1 (updated)="#child2.callMethod(obj, $event)"/> <child2 #child2/>
Ответ №1:
Для этого вам понадобится сервис и свойство типа subject
service.ts
mySub = new Subject();
componet1
this.myService.mySub.next({id:123,data:{}})
component2
this.myService.mySub.subScribe(event=>{
this.callfn(event.id,event.data)
})
Ответ №2:
Без кода вам будет сложно помочь, но я постараюсь.
Итак, вы используете RXJS, и я имею в виду observable. Поэтому, когда ваш второй компонент получит идентификатор или объект, вы можете вызвать функцию (внутри подписки).
observable.subscribe({
next(x) { callFunction(x) },
error(err) { console.error('something wrong occurred: ' err); },
complete() { console.log('done'); }
});
Не стесняйтесь взглянуть на документацию: https://rxjs.dev/guide/observable