EI-*_*-01 4 typescript angular2-components angular
您好我有一个父组件(A),它有2个子组件(B和C).父A在默认情况下显示子组件B.现在当单击按钮显示在父A上时,它将子组件B替换为子组件C.如何在angular2中单击按钮后用组件C替换组件B?
为此,您可以使用*ngIf指令或hidden属性.
注意区别:
*ngIf 删除并重新创建元素:如果分配给ngIf的表达式求值为false值,则从DOM中删除该元素,否则将该元素的克隆重新插入到DOM中.
hidden 使用隐藏元素 display: none来自angular`s 文档:
显示/隐藏技术可能适用于小元素树.隐藏大树时我们应该警惕; NgIf可能是更安全的选择.始终在跳到结论之前进行测量.
检查以下示例:
@Component({
selector: 'my-app',
template: `
<b>Using *ngIf:</b>
<div *ngIf="!isOn">Light Off</div>
<div *ngIf="isOn">Light On</div>
<br />
<b>Using [hidden]:</b>
<div [hidden]="isOn">Light Off</div>
<div [hidden]="!isOn">Light On</div>
<br />
<button (click)="setState()">{{ getButtonText() }}</button>
`
})
export class AppComponent {
private isOn: boolean = false;
getButtonText(): string {
return `Switch ${ this.isOn ? 'Off' : 'On' }`;
}
setState(): void {
this.isOn = !this.isOn;
}
}
Run Code Online (Sandbox Code Playgroud)
Plunker:http://plnkr.co/edit/7b1eWgSHiM1QV6vDUAB0
为了进一步阅读[hidden],我指出这篇文章:http://angularjs.blogspot.com.br/2016/04/5-rookie-mistakes-to-avoid-with-angular.html
希望有所帮助.
通常,您会在父 A 的模板中同时拥有这两个组件,但您会使用 anngIf使它们仅在应该出现时出现。
<button (click)="setButtonClicked(true)">Click Me</button>
<component-b *ngIf="!buttonWasClicked"></component-b>
<component-c *ngIf="buttonWasClicked"></component-c>
Run Code Online (Sandbox Code Playgroud)
在 Parent A 的模型中,您有相应的代码来设置属性:
buttonWasClicked: boolean = false;
setButtonClicked(clicked: boolean) {
this.buttonWasClicked = clicked;
}
Run Code Online (Sandbox Code Playgroud)
您可能更喜欢使用NgSwitch而不是NgIf.