【问题标题】:How to access the app.component variables and methods from other pages in Ionic?如何从 Ionic 的其他页面访问 app.component 变量和方法?
【发布时间】:2018-03-06 23:42:30
【问题描述】:

我想从其他页面 (otherpage.ts) 或其他组件访问和更改 app.component.ts 变量或访问方法;

app.component.ts

@Component({
  templateUrl: 'app.html'
})
export class MyApp {

  accessedVariable: any;

  constructor(){ }

  accessedMethod() {
   ..something
  }

}

otherpage.ts

@Component({
  selector: 'page-other',
  templateUrl: './otherpage.html',
})
export class OtherPage {

  constructor() { }
}

【问题讨论】:

  • OtherPageMyApp 的孩子吗?
  • @Dr.Geek 你能简要解释一下你正在尝试做什么,尤其是accessedMethod。另外,app.component 和 otherpage parent 是否相关或完全分开
  • 也许answer 会有所帮助。如果您只想更改子页面中的菜单内容,只需使用service

标签: angular typescript ionic-framework ionic3


【解决方案1】:

我的用例 Ionic 5 电容器:我想在标头组件的 ion-header 中显示 ion-spinner。在标头组件中,我订阅了可以在另一个服务中设置为 true 的可观察变量。该方法很灵活,我可以在子组件或父组件/页面中使用它。

MyService.service.ts:(初始化可观察变量和设置方法)

import { BehaviorSubject } from 'rxjs';

export class MyService {

    spinnerBehavior = new BehaviorSubject(false);
    obSpinner: any = this.spinnerBehavior.asObservable();

    set spinner(showSpinner: boolean) {
        this.spinnerBehavior.next(showSpinner);
    }
}

另一个Service.service.ts:

export class AnotherService {

    constructor(private myService: MyService) {}

    public someMethod() {    
        this.myService.spinner = true;
    }
}

MyComponent.component.ts:

export class MyComponent implements OnInit {
    public showSpinner: boolean;

    constructor(private myService: MyService) {}

    ngOnInit() {
        this.myService.obSpinner.subscribe(showSpinner => {
          this.showSpinner = showSpinner;
        });
      }
}

MyComponent.component.html:

<ion-spinner *ngIf="showSpinner"></ion-spinner>

【讨论】:

    【解决方案2】:

    18-02-2020

    请不要使用Event emitter。使用Observable 模式。否则,您在更新到Ionic 5 时将不得不面对问题。即Ionic 5 上没有事件 API。

    原创

    您可以通过多种方式做到这一点。

    我可以告诉你的一种方法是使用Events

    Events 是一个发布-订阅风格的事件系统,用于发送和 在您的应用中响应应用级事件。

    另一种方法可能是使用provider。在该用例上,您可以通过provider 分享您的methodsvariables

    【讨论】:

    • 这不是我想要的。我想访问 app.component.ts 意味着我想从子页面或其他页面更改变量之类的东西。例如&lt;ion-menu content&gt;,是否可以在更改子页面时更改离子内容菜单....
    • 您可以使用Events 来完成,正如我在1st 方法中提到的那样。你为什么不能用那个方法?根据此处的用例,这是您唯一的选择。
    • 因为如果项目是第一次加载,app.ccomponent(也就是 menu-items )加载并且在项目页面发生更改后,我们无法更改现有 app.component.ts 中的参数。 .
    • 希望您能根据您的具体用例更新您的问题。此时您只需提出一个通用问题。即如何访问方法和变量。
    • 我会先试试你的答案,然后我可以改变
    【解决方案3】:

    最快的方法是使用 GlobalVars Provider:

    首先安装它:

    ionic g provider globalvars
    

    这会自动将新的提供程序添加到您的 app.module.ts 文件中

    import {Injectable} from '@angular/core';
    @Injectable()
    export class GlobalVars { 
    myGlobalVar: any;
    constructor() { 
    this.myGlobalVar = ""; 
    } 
    
    setMyGlobalVar(value) { 
    this.myGlobalVar = value; 
    }
    
    getMyGlobalVar() { 
    return this.myGlobalVar; 
    } 
    }
    

    您在那里定义 gettersetter 方法,并且可以通过此类的实例访问所需的变量!在 YourOtherPage.ts 中,您可以通过以下方式获取变量:例如 this.glVars.getMyGlobalVar()

    您可以在此处阅读更多相关信息:https://ionicallyspeaking.com/2016/03/10/global-variables-in-ionic-2/

    【讨论】:

    • 这不是我想要的。我想访问 app.component.ts !
    • 我知道我也尝试过,但是页面被封装在 Ionic/Angular 中。您可以尝试使用 jquery 和 index.html 作为替代方案来触发您的页面。我这样做是为了我的媒体数据库
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-20
    • 1970-01-01
    • 2019-04-25
    • 1970-01-01
    • 2014-11-29
    • 2013-08-16
    • 1970-01-01
    相关资源
    最近更新 更多