No momento, estou usando o Angular 2. Normalmente usamos @Output() addTab = new EventEmitter<any>();
e addTab.emit()
para emitir um evento para o componente pai.
Existe alguma maneira de fazermos vice-cersa, de pai para filho?
angular
typescript
code1
fonte
fonte
Respostas:
Usando RxJs , você pode declarar um
Subject
em seu componente pai e passá-lo comoObservable
componente filho, o componente filho só precisa se inscrever neleObservable
.Componente-pai
HTML pai
Componente-filho
fonte
this.eventsSubject.next({data});
no pai, depoisthis.events.subscribe(({data}) => doSomething(data));
no filho.eventsSubject
para um Observable em vez de apenas inscrevê-lo como um Assunto?Pelo que eu sei, existem 2 maneiras padrão de fazer isso.
1. @Input
Sempre que os dados no pai são alterados, o filho é notificado sobre isso no método ngOnChanges. A criança pode agir sobre isso. Esta é a maneira padrão de interagir com uma criança.
Criando um serviço e usando um observável no serviço compartilhado. A criança assina e sempre que houver alteração, ela será avisada. Este também é um método popular. Quando você quiser enviar algo diferente dos dados que você passou como entrada, isso pode ser usado.
fonte
<child [data]="inputToChild"> </child>
provavelmente deve ser<child [data]="(inputToChild)"> </child>
para obter as alteraçõesEm um componente pai, você pode usar @ViewChild () para acessar o método / variável do componente filho.
Atualizar:
Angular 8 em diante -
fonte
numberComponent
estaráundefined
.Use o decorador @Input () em seu componente filho para permitir que o pai se vincule a esta entrada.
No componente filho, você o declara como está:
@Input() myInputName: myType
Para vincular uma propriedade de pai a filho, você deve adicionar em seu modelo os colchetes de ligação e o nome de sua entrada entre eles.
Exemplo:
<my-child-component [myChildInputName]="myParentVar"></my-child-component>
Mas cuidado, os objetos são passados como referência, portanto, se o objeto for atualizado no filho, o var do pai também será atualizado. Isso pode levar a algum comportamento indesejado em algum momento. Com tipos primários, o valor é copiado.
Para ir mais longe, leia isto:
Documentos: https://angular.io/docs/ts/latest/cookbook/component-communication.html
fonte
No pai, você pode fazer referência ao filho usando @ViewChild. Quando necessário (ou seja, quando o evento seria disparado), você pode apenas executar um método no filho do pai usando a referência @ViewChild.
fonte