据我所知,有相似的问题。我相信我的情况略有不同。我试图检查本机存储中的值,如果它是真的。我正试图导航到HomePage。到目前为止阅读了几篇文章之后,我知道我无法使用NavController一个依赖注入器。
我也尝试过使用@ViewChild,但为此我假设我需要在模板中定义一个我将使用的变量。但是我使用的是html模板。我是Ionic 2和Angular 2的新手,所以请对我这么简单:-)。
我可以通过其他任何方式实现这一目标吗?如果你们有解决方案,请详细说明一下。
这是我在app.components.ts(下面)中的代码。目前我刚刚评论了navCtrl代码。
import { Component,ViewChild } from '@angular/core';
import { Platform } from 'ionic-angular';
import { StatusBar } from '@ionic-native/status-bar';
import { SplashScreen } from '@ionic-native/splash-screen';
import { LoginPage } from '../pages/login/login';
import { NativeStorage } from '@ionic-native/native-storage';
import { NavController } from 'ionic-angular';
import { HomePage } from '../pages/home/home';
@Component({
templateUrl: 'app.html',
})
export class ClassetteApp {
@ViewChild("appNav") nav: NavController;
rootPage:any = LoginPage;
constructor(platform: Platform, statusBar: StatusBar, splashScreen: SplashScreen, private nativeStorage : NativeStorage) {
platform.ready().then(() => platform.ready().then(() => {
this.nativeStorage.getItem("userId").then(function(data){
this.nav.push(HomePage);
},function(error){
this.nav.push(LoginPage);
})
statusBar.styleDefault();
splashScreen.hide();
})
)}
}
这是我的app.html。
<ion-nav #appNav [root]="rootPage"></ion-nav>
答案 0 :(得分:2)
检查here。 您无法注入NavController,因为任何作为导航控制器的组件都是根组件的子组件,因此无法注入它们。
你的身份证号错了。
@ViewChild('appNav') nav: NavController
它应与您在html中提供的#appNav
ID相同。
最后,您使用常规函数作为回调。 this
指向函数对象而不是类。所以它找不到nav
。使用Arrow function。
this.nativeStorage.getItem("userId").then((data)=>{
this.nav.push(HomePage);
},(error)=>{
this.nav.push(LoginPage);
})
答案 1 :(得分:0)
对该答案的更新,我发现我们可以使用以下内容:确保您拥有最新的Ionic版本。 3.3.0。在这里,您不必向html模板添加变量。
import { NavController, Platform } from 'ionic-angular';
import { LoginPage } from '../pages/login/login';
@Component({
templateUrl: 'app.html'
})
export class MyApp {
@ViewChild('appNav') nav: NavController;
loginPage: any = LoginPage;
/* your code */
SomeFunction(){
this.nav.push(loginPage);
}
}