В настоящее время я использую Angular 2. Обычно мы используем @Output() addTab = new EventEmitter<any>();
а затем addTab.emit()
для отправки события родительскому компоненту.
Есть ли способ сделать это по-другому, от родителя к ребенку?
angular
typescript
code1
источник
источник
Ответы:
Используя RxJs , вы можете объявить a
Subject
в родительском компоненте и передать его какObservable
дочернему компоненту, дочернему компоненту просто нужно подписаться на этоObservable
.Родительский компонент
Родительский HTML
Дочерний компонент
источник
this.eventsSubject.next({data});
в родительском, потомthis.events.subscribe(({data}) => doSomething(data));
в дочернем.eventsSubject
в Observable, а не просто подписываться на него как на Subject?Насколько мне известно, это можно сделать двумя стандартными способами.
1. @ Вход
Каждый раз, когда данные в родительском элементе изменяются, дочерний элемент получает уведомление об этом в методе ngOnChanges. Ребенок может действовать по нему. Это стандартный способ взаимодействия с ребенком.
Создание службы и использование наблюдаемого в общей службе. Ребенок подписывается на него, и всякий раз, когда происходит изменение, ребенок будет уведомлен. Это тоже популярный метод. Если вы хотите отправить что-то, кроме данных, которые вы передаете в качестве входных, это можно использовать.
источник
<child [data]="inputToChild"> </child>
вероятно, должны быть<child [data]="(inputToChild)"> </child>
измененияВ родительском компоненте вы можете использовать @ViewChild () для доступа к методу / переменной дочернего компонента.
Обновить:
Угловой 8 и далее -
источник
numberComponent
и будетundefined
.Используйте декоратор @Input () в своем дочернем компоненте, чтобы позволить родителю привязаться к этому входу.
В дочернем компоненте вы объявляете его как есть:
@Input() myInputName: myType
Чтобы привязать свойство от родителя к дочернему, вы должны добавить в свой шаблон связывающие скобки и имя вашего ввода между ними.
Пример :
<my-child-component [myChildInputName]="myParentVar"></my-child-component>
Но будьте осторожны, объекты передаются как ссылка, поэтому, если объект обновляется в дочернем элементе, родительский var будет слишком обновлен. Иногда это может привести к нежелательному поведению. С первичными типами значение копируется.
Чтобы пойти дальше, прочтите это:
Документы: https://angular.io/docs/ts/latest/cookbook/component-communication.html
источник
В родительском элементе вы можете ссылаться на дочерний элемент с помощью @ViewChild. При необходимости (т. Е. Когда событие будет запущено) вы можете просто выполнить метод в дочернем элементе от родителя, используя ссылку @ViewChild.
источник