我正在尝试在 Ionic3 中创建一个自定义菜单,当用户单击那个汉堡包图标时,它需要向元素添加#menu一个open类,我正在尝试使用ngClass
问题是这个图标在我的菜单组件之外,这个图标在我的页面中 home-user
打开后,我的菜单看起来像下一张图片,所以我不能使用 ionic 的默认菜单
所以我的组件menu有一个名为 的变量opened,这个变量决定了我的菜单元素的类
菜单.ts
@Component({
selector: 'menu',
templateUrl: 'menu.html',
})
export class MenuComponent {
opened: boolean = true;
constructor() {
}
toggleMenu() {
this.opened = !this.opened;
}
}
Run Code Online (Sandbox Code Playgroud)
所以当我触发时toggleMenu()我改变了opened价值
我在我的组件页面中触发此功能并正常工作
菜单.html
<div id="menu" [ngClass]="opened ? 'open' : ''">
<a class="menu-item" href="#">Sair</a>
<ion-icon (click)="toggleMenu()" id="toggleMenu" name="close"></ion-icon>
</div>
Run Code Online (Sandbox Code Playgroud)
那么,我的问题是什么?
toggleMenu()例如,我如何从我的home-user.html页面调用它,该页面也有一个按钮,并且该按钮应该更改opened变量的值
我试过什么
我试图在我的menu.module.ts中创建一个函数来触发该toggleMenu()函数menu.ts
菜单.module.ts
@NgModule({
declarations: [
MenuComponent,
],
})
export class MenuComponentModule {
constructor(public menuComponent: MenuComponent) {
}
toggleMenu() {
this.menuComponent.toggleMenu()
}
}
Run Code Online (Sandbox Code Playgroud)
但是安慰这些值,我注意到opened从组件调用和从我的页面调用时的值不同
我建议Events 在 ionic 中使用模块。
此模块生成的事件在整个应用程序中全局传播。
你可以像下面那样使用它。
在Homepage.ts 中
import { Events } from 'ionic-angular';
//skip wrapping component
constructor(public events: Events) {}
onMenuClicked(){
this.events.publish('toggleMenu')
}
Run Code Online (Sandbox Code Playgroud)
在Menu.ts
import { Events } from 'ionic-angular';
//skip wrapping component
constructor(public events: Events) {
events.subscribe('toggleMenu', () => {
this.opened = !this.opened
});
}
Run Code Online (Sandbox Code Playgroud)