让我们说我有两个组成部分:主页和编辑。
在主页组件中,当我点击"添加帖子"按钮,然后我显示editor
组件。
<button (click)="showEditor()">Show editor</button>
<editorComponent *ngIf="clicked"></editorComponent>
showEditor()
只需将clicked
变量设置为true
,然后会出现editor
组件。
<div class="editor">
...some editor stuff
<button (click)="cancel()">Cancel</button>
</div>
点击editor
按钮后,我想在homepage
组件中隐藏Cancel
组件。为此,我应该再次将homepageComponent.clicked
设置为false,但是如何在另一个组件中执行此操作。你有没有更好的主意?
答案 0 :(得分:0)
我建议添加一个&#39;点击&#39; hp-component的值,传递给editor-component。如果修改了该值,则angular将识别此值并更新值并相应地查看。
不幸的是,JavaScript按值传递基元,所以我们需要作弊:
class Wrapper {
constructor( public value: any ) { }
}
将其添加到主页组件:
class HpComponent {
clicked: Wrapper = new Wrapper(false);
showEditor() { clicked.value = true; }
}
class EditorComponent {
@Input() clicked: Wrapper;
cancel() { clicked.value = false; }
}
并将对象传递给编辑器组件:
<button (click)="showEditor()">Show editor</button>
<editorComponent *ngIf="clicked.value" [clicked]="clicked"></editorComponent>
免责声明:我对angular2很新,所以这可能不是最好的答案。 AFAIK Typescript提供泛型,您可以在包装类中实现它们。
答案 1 :(得分:0)
使用@Output事件。子组件将发出父通过绑定订阅的事件。
homepage.html
<editor (cancelClickedEvent)="cancelEvent"></editor>
homepage.ts
cancelEvent(data) {
// hide editor component
}
editor.html
<div class="editor">
...some editor stuff
<button (click)="cancel()">Cancel</button>
</div>
editor.ts文件
@Output
cancelClickedEvent: any = new EventEmitter<any>();
onCancelClick() {
this.cancelClickedEvent.emit(data) // <-- data is whatever you want
}