Captura de evento angular 2 entre componentes irmãos
Eu apenas comecei a aprender Angular 2, e esta é a minha primeira pergunta sobre estouro de pilha, então aqui vai ...
Eu tenho um componente externo com dois componentes internos aninhados. Eu tenho um botãoInnerComponent1
que, quando clicado, dispara um evento que o componente externo captura, que passa o valor (sempre verdadeiro) paraInnerComponent2
. InnerComponent2
é exibido (* ngIf) com base nesse valor.
Funciona.
Buuuut ..InnerComponent2
possui um botão que, quando clicado, torna esse valor falso, o que oculta o componente.
Isso também funciona.
Mas uma vez que eu escondiInnerComponent2
, o botãoInnerComponent1
que exibeInnerComponent2
não funciona mais. Não estou vendo nenhum erro e confirmei que o componente externo ainda está recebendo os eventos.
Aqui está um plnkr que mostra o cenário:http://plnkr.co/edit/X5YnNVm0dpFwA4ddv4u7?p=preview
Alguma ideia?
Muito obrigado.
Componente externo
//our root app component
import {Component} from 'angular2/core';
import {Inner1Component} from 'src/inner1';
import {Inner2Component} from 'src/inner2';
@Component({
selector: 'my-app',
providers: [],
template: `
<p>OuterComponent</p>
<inner1 (show2)="show2Clicked = $event"></inner1>
<inner2 [showMe]="show2Clicked"></inner2>
`,
directives: [Inner1Component, Inner2Component]
})
export class App {
show2Clicked: boolean;
}
InnerComponent1
import {Component, EventEmitter, Output} from 'angular2/core'
@Component({
selector: 'inner1',
providers: [],
template: `
<p>inner1</p>
<button (click)="showInner2()">Show inner2</button>
`,
directives: []
})
export class Inner1Component {
@Output() show2 = new EventEmitter<boolean>();
showInner2() {
this.show2.emit(true);
}
}
InnerComponent2
import {Component, Input} from 'angular2/core'
@Component({
selector: 'inner2',
providers: [],
template: `
<div *ngIf="showMe">
<p>Inner2</p>
<button (click)="showMe = false">Cancel</button>
</div>
`,
directives: []
})
export class Inner2Component {
@Input() showMe: boolean;
}