【问题标题】:Ionic: can you use navCtl.push() inside a provider离子:您可以在提供程序中使用 navCtl.push()
【发布时间】:2018-01-08 14:46:48
【问题描述】:

我设置了一个提供程序,该提供程序具有检查存储值的功能,如果未设置,将强制用户在使用应用程序之前进行设置。

因此,在每个页面上,在构造函数中,我都会在提供程序中调用我的 checkToken() 函数,如果没有设置,我想这样做

this.navCtl.push(TokenPage)

但我得到了这个错误

Error: Uncaught (in promise): Error: StaticInjectorError[NavController]: 
  StaticInjectorError[NavController]: 
    NullInjectorError: No provider for NavController!

这是我的提供者中的构造函数

constructor(private inAppBrowser: InAppBrowser, private storage:Storage, private navCtl:NavController) {
    console.log('Hello SharedProvider Provider');
    this.live = false;

  }

这是检查我的存储中的值的函数。

 checkLogin(){
    var promise = new Promise((resolve, reject)=>{
      this.storage.get("virtualToken").then((val)=>{
        this.virtualToken = val;

      });
      this.storage.get("liveToken").then((val)=>{
        this.liveToken = val;
      });

    });
    if((this.virtualToken == null || this.virtualToken == '') && (this.liveToken == null || this.liveToken == '')){
      console.log("Result of checkLogin" + this.virtualToken);
      this.navCtl.push(TokenPage);
    }

  }

【问题讨论】:

    标签: ionic-framework navigation


    【解决方案1】:

    这可能是因为 NavController 不包含在 Ionic 核心模块中,因此它在服务/提供者中不可用。 您可以尝试这种解决方法,但即使我在提供程序中使用它来访问导航控制器,它也不理想:-

    constructor(protected app: App) {...
    ....
    }
    
    get navCtrl(): NavController {
        return this.app.getRootNav();
    }
    

    然后您就可以在服务中的任何位置访问 navCtrl:

    this.navCtl.push(TokenPage);
    

    【讨论】:

      猜你喜欢
      • 2010-10-01
      • 1970-01-01
      • 2018-01-13
      • 1970-01-01
      • 2011-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多