Ionic - 从另一个页面或组件更新组件的变量

Spa*_*gCS 1 components ionic3

我正在尝试在 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从组件调用和从我的页面调用时的值不同

Hyu*_*ang 5

我建议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)