【发布时间】:2018-09-14 12:01:21
【问题描述】:
我只想在单击子组件中的按钮时更新父组件中的布尔值。我有一个基于动态 ngClass 隐藏和显示的滑出子组件。该类是根据父级的布尔值设置的。但是,当我从子项中的按钮关闭该组件时,我想更新父项中的布尔值:
父组件打字稿:
export class AppComponent implements OnInit {
showFlyout: boolean
constructor() {}
ngOnInit() {
this.showFlyout = false;
}
}
和父 html:
<main>
<button (click)="showFlyout = !showFlyout"><i class="fa fa-check"></i>Show Flyout</button>
{{showFlyout}}
<app-child id="flyout" [ngClass]="showFlyout ? 'active' : ''"></app-child>
</main>
子组件打字稿:
export class ActivateFlyoutComponent implements OnInit {
constructor() { }
ngOnInit() {
}
closeActivationFlyout() {
const flyout = document.getElementById('flyout');
flyout.classList.remove('active');
}
}
及子组件html:
<button (click)="closeFlyout()">Close</button>
这是Stackblitz。您可以看到单击父按钮可以正确切换类,但是如何通过单击子组件来更新该布尔值,从而使子组件中不需要 closeActivationFlyout() 方法?
【问题讨论】:
-
使用@Output 装饰器和布尔类型的EventEmitter
-
我的回答忘了更改子元素的状态。请接受君的回答。
-
@JordanBarber 直接操作 dom 不是做这种事情的正确方法,
-
@RandyCasburn,这正是我问这个问题的原因。我知道 DOM 操作是错误的方式,而我收到的答案帮助我消除了这种情况。感谢您的帮助!
标签: javascript angular typescript toggle angular-components