Ionic:你可以在提供者

时间:2018-01-07 20:55:12

标签: ionic-framework navigation

我已经设置了一个提供程序,其中包含一个检查存储中的值的函数,如果没有设置将强制用户在使用该应用程序之前设置它。

所以,在每个页面上,在构造函数中我在提供程序中调用我的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);
    }

  }

1 个答案:

答案 0 :(得分:0)

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

constructor(protected app: App) {...
....
}

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

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

this.navCtl.push(TokenPage);