我剛開始學習角2,這是我第一次堆棧溢出的問題,所以這裏去...角2事件同級組件之間的捉
我有兩個嵌套的內部組件的外部組件。我在InnerComponent1
中有一個按鈕,點擊後會觸發外部組件捕獲的事件,然後將該值(始終爲true)傳遞到InnerComponent2
。根據該值顯示(* ngIf)InnerComponent2
。
它的工作原理。
Buuuut .. InnerComponent2
有一個按鈕,單擊該按鈕時,該值將爲false,從而隱藏組件。
也可以。
但是,一旦我隱藏InnerComponent2
,InnerComponent1
中顯示InnerComponent2
的按鈕不再有效。我沒有看到任何錯誤,並且我確認外部組件仍在接收事件。
下面是顯示方案一plnkr:http://plnkr.co/edit/X5YnNVm0dpFwA4ddv4u7?p=preview
有什麼想法?
非常感謝。
外部部件
//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;
}
完善。非常感謝您的快速響應。按預期工作。只是爲了澄清到底發生了什麼:我們需要'inner2'中的事件發射器來觸發變量的重新評估和重新渲染?因爲發出的'showMeChange'事件沒有被捕獲到任何地方。 – David
我更新了我的答案(評論太長)。 –
速記。疑難雜症。這正是我所期待的。 **非常感謝。**官方的Angular2文檔仍然缺乏,可以理解。 – David