#angular #rxjs #rxjs6 #rxjs-observables
#angular #rxjs #rxjs6 #rxjs-наблюдаемые
Вопрос:
Чтобы передать любой щелчок от дочернего элемента к родительскому, мы можем использовать @output в дочернем, а в родительском html мы можем прослушать это событие, используя способ, показанный ниже
<app-item-output (newItemEvent)=»addItem($event)»>
в parent мы можем написать метод addItem($event) и выполнить нашу работу, но есть ли какой-либо способ преобразовать его в stream, чтобы я мог использовать его в сочетании с другими наблюдаемыми.
Один из способов, о котором я могу думать сейчас, — это иметь subject в parent, а затем передавать значение, как показано ниже, для создания потока в parent
addItem($event) {
subject.emit()
}
Но если у нас есть какой-либо прямой способ преобразовать событие, передаваемое дочерним компонентом, в наблюдаемое, это было бы лучше.
Комментарии:
1. Возможно, вы захотите использовать службу для обработки сообщений между дочерним и родительским компонентами. Как вы говорите, создайте тему в службе, чтобы ваш дочерний элемент обновил данные, используя его метод «next», и подписался на родительский элемент или наоборот.
Ответ №1:
Вы можете добиться этого, используя декоратор ViewChild.
<app-item-output #myChild></app-item-output>
@ViewChild('myChild') myChild: ItemOutputComponent;
ngAfterViewInit() {
this.myChild.newItemEvent.subscribe(
event => /** do something **/
);
}
Попробуйте описанное в stackblitz:
https://stackblitz.com/edit/angular-ivy-q9rcmk?file=src/app/app.component.ts
Комментарии:
1. Да, в этом случае мне не нужен даже ‘@output ()’ то, что вы делаете таким образом, — это получение управления от дочернего элемента в родительском, но меня больше интересует знание любого прямого способа с помощью ‘@output()’ без ввода дочернего экземпляра в родительский.
2. Я не смог найти другого способа сделать это напрямую, поэтому продолжаю использовать подход @MoxxiManagarm