【发布时间】:2016-06-13 16:03:57
【问题描述】:
我目前正在自学 Angular2,我有一个在 AngularJS 中很容易解决的实际问题,但目前我正在通过示例寻找 Angular2 的解决方案。无论如何,我有一个名为 App 的顶级组件,在该组件中我有一个应用 css 类的属性,这是用作组件模板的我的 HTML - 你可以看到我希望在哪里应用 css 类使用ngClass。 showMenu 值只是一个布尔值。
<div class="navigation" role="navigation">
<ul>
<li><a [routerLink]="['Home]">Home</a></li>
<li><a [routerLink]="['Mail']">Mail</a></li>
<li><a [routerLink]="['Friends']">Friends</a></li>
<li><a [routerLink]="['Games']">Games</a></li>
</ul>
</div>
<!-- below is where I wish to toggle the class -->
<div class="site-wrap" [ngClass]="{'slide-right': showMenu}">
<div class="container-fluid">
<div class="row nav">
<top-navigation></top-navigation>
</div>
</div>
<div class="container-fluid content-gradient">
<div class="row">
<div class="col-md-10">
<router-outlet></router-outlet>
</div>
<div class="col-md-2">
<contacts-list></contacts-list>
</div>
</div>
</div>
<div class="container-fluid footer">
<footer-navigation></footer-navigation>
</div>
</div>
这里是 App 的组件代码(这里看的不多……)
export class App {
showMenu: boolean = false;
constructor() {
}
// I need to listen for the toggle somehow?
toggleMenu():void {
this.showMenu = !this.showMenu;
}
}
现在您可以看到我有一个带有选择器top-navigation 的子组件。这个组件TopNavigation 在一个按钮上有一个方法,我希望在父/顶级组件中切换showMenu 的值。到目前为止,这是我的代码(只是一小部分摘录)
export class TopNavigation {
constructor() {
// Things happening here
}
toggleMenu():void {
// I want to toggle the parent property by somekind of $emit
}
}
这里是组件的模板 HTML(不是全部)。
<div class="col-xs-2 col-sm-1 hidden-md hidden-lg hamburger-menu">
<button class="btn btn-default" (click)="toggleMenu()">☰</button>
</div>
在 AngularJS 中,toggleMenu 函数上有一个 $scope.$emit,在父函数中,我有一个 $scope.$on 来监听事件。我目前正在阅读关于 Angular2 中的 EventEmitters 的信息,但是如果有人有一个快速的解释/示例,我将非常感激,特别是因为我认为这是 Angular 开发人员的常见/实用的日常任务。
【问题讨论】:
-
如果你有直接的亲子关系,我更喜欢 Günter 的回答。如果您需要从多个组件中切换值,请使用他们的答案(但使用 Observable 而不是 EventEmitter)。
标签: typescript angular eventemitter