Angular 2 Event Catching zwischen Geschwisterkomponenten

Ich habe gerade angefangen, Angular 2 zu lernen, und dies ist meine allererste Stapelüberlauf-Frag

Ich habe eine äußere Komponente mit zwei verschachtelten inneren Komponenten. Ich habe eine Schaltfläche inInnerComponent1, das beim Klicken ein Ereignis auslöst, das von der äußeren Komponente abgefangen wird, und das den Wert (immer wahr) an @ übergibInnerComponent2. InnerComponent2 wird basierend auf diesem Wert angezeigt (* ngIf).

Es klappt

Buuuut ..InnerComponent2 hat eine Schaltfläche, die beim Klicken diesen Wert auf false setzt, wodurch die Komponente ausgeblendet wird.

Das funktioniert auch.

Aber sobald ich mich versteckt habeInnerComponent2, die Schaltfläche inInnerComponent1 das zeigtInnerComponent2 funktioniert nicht mehr. Ich sehe keine Fehler und habe bestätigt, dass die äußere Komponente die Ereignisse noch empfängt.

Hier ist ein Plan, der das Szenario zeigt:http: //plnkr.co/edit/X5YnNVm0dpFwA4ddv4u7? p = preview

Irgendwelche Gedanken?

Vielen Dank

Outer component

//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;
}

Antworten auf die Frage(4)

Ihre Antwort auf die Frage