Ionique 2: EXCEPTION: Pas de fournisseur pour NavController
j'ai un problème avec mon ionique 2/angulaire 2 app.
J'ai une application.ts où le trou "auth" la partie est implementet.
Le code ressemble à ceci:
import {Nav, Platform, Modal, ionicBootstrap} from "ionic-angular";
import {NavController} from "ionic-angular/index";
import {StatusBar} from "ionic-native";
import {Component, ViewChild} from "@angular/core";
import {AngularFire, FirebaseListObservable, FIREBASE_PROVIDERS, defaultFirebase} from "angularfire2";
import {HomePage} from "./pages/home/home";
import {AuthPage} from "./pages/auth/home/home";
@Component({
templateUrl: "build/app.html",
})
class MyApp {
@ViewChild(Nav) nav: Nav;
authInfo: any;
rootPage: any = HomePage;
pages: Array<{title: string, component: any}>;
constructor(private platform: Platform, private navCtrl: NavController, private af: AngularFire) {
this.initializeApp();
this.pages = [
{ title: "Home", component: HomePage }
];
}
initializeApp() {
this.platform.ready().then(() => {
//Okay, so the platform is ready and our plugins are available.
//Here you can do any higher level native things you might need.
StatusBar.styleDefault();
});
}
openPage(page) {
this.nav.setRoot(page.component);
}
ngOnInit() {
this.af.auth.subscribe(data => {
if (data) {
this.authInfo = data;
} else {
this.authInfo = null;
this.showLoginModal();
}
});
}
logout() {
if (this.authInfo) {
this.af.auth.logout();
return;
}
}
showLoginModal() {
let loginPage = Modal.create(AuthPage);
this.navCtrl.present(loginPage);
}
}
Mais maintenant, quand j'essaye d'exécuter l'application, j'obtiens ce message:
ORIGINAL EXCEPTION: No provider for NavController
Avez-vous une idée de comment résoudre ce problème? Merci!
OriginalL'auteur Fargho | 2016-06-30
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas injecter un NavController dans un composant Racine via un constructeur.
Donc, fondamentalement, vous pouvez
not
faire quelque chose comme ci-dessous:-C'est comment vous pouvez injecter un NavController
Et c'est ce Ionique docs a à dire.
OriginalL'auteur Mav55
Vous ne pouvez pas injecter le
NavController
dans votre Composant Racine de sorte que vous devriez le supprimer de cette partie du code. Plus d'informations peuvent être trouvées ici.Veuillez assurez-vous que vous disposez déjà d'une variable de référence dans votre
ion-nav
, comme ceci (le#myNav)
:Et puis, vous pouvez obtenir la référence à l'aide de
ViewChild
. Vous pouvez ensuite il suffit de naviguer vers une autre page, en utilisant la propriété:OriginalL'auteur sebaferreras
Il est recommandé que vous utilisez
this.app.getActiveNavs()
Ionique dans les 3+ comme getActiveNav() sera supprimée dans la prochaine version majeure, de sorte que votre fonction peut être écrite comme suit:À pousser sur la valeur liquidative de la pile, vous pouvez simplement importer la page (dire
YourPage
) puis:Ancien comportement, pour Ionique 2, obsolète Ionique 3:
Vous pouvez utiliser
this.getActiveNav()
Ionique dans les 2 (Ionique et 3), de sorte que votre fonction peut être écrite comme suit:Avec ces deux méthodes, vous n'avez pas besoin de tout
import
ouprivate
variable pour que cela fonctionne. Si vous êtes dans unComponent
, tout simplement se référer à votreApp
:Merci @Adam, j'ai double post sur deux questions, alors vous avez raison, pas vraiment utile ici! Je suis en train de monter en ce moment.
OriginalL'auteur Yvan
Ok, j'ai juste utilisé la valeur liquidative au lieu de NavigationController et maintenant ça fonctionne.
OriginalL'auteur Fargho
J'ai manipulé avec:
Répondre prises à partir d'ici: github questions
OriginalL'auteur V. Aliosha
Vous avez nommé votre nav incorrecte;
Devrait être
Et vérifiez si votre importer correctement
NavController
sont correctement importées. Le problème est qu'il ne peut pas être injecté ici. Il a fait une référence ànav
par écrit@ViewChild(Nav) nav: Nav;
.Nav
s'étendNavController
de sorte qu'il peut être utilisé à la place.OriginalL'auteur LeRoy
Une des causes de cette erreur lorsque vous essayez d'injecter
NavController
dans un fournisseur de classe.Comme ceci:
J'ai juste eu cette erreur...
Après la suppression de cette injection (et refactoring du code), il a bien fonctionné.
OriginalL'auteur Ricardo Silva