Ionischen 2: AUSNAHME: Kein Anbieter für NavController
ich habe ein problem mit meinem ionic 2/Winkel 2 app.
Hab ich eine app.ts, wo das Loch "auth" - Teil ist vorgegeben.
Der code sieht so aus:
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);
}
}
Aber jetzt, wenn ich versuche die app starte, bekomme ich diese Meldung:
ORIGINAL EXCEPTION: No provider for NavController
Haben Sie eine Idee, wie dieses problem zu lösen? Danke!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sie kann nicht Spritzen, ein NavController in einer Root-Komponente, die über einen Konstruktor.
Also, im Grunde können Sie
not
etwas tun, wie unten:-Dies ist, wie Sie gelingen kann, eine NavController
Und das ist, was Ionischen docs zu sagen hat.
Kann man nicht injizieren die
NavController
in Ihrem Root-Komponente so, Sie sollten entfernen es aus, dass ein Teil des Codes. Weitere Informationen finden Sie hier.Bitte stellen Sie sicher, dass Sie bereits eine Referenz-variable in Ihrer
ion-nav
wie diese (die#myNav)
:Und dann können Sie den Verweis, indem Sie mit
ViewChild
. Sie können dann navigieren Sie einfach zu einer anderen Seite, durch die Verwendung dieser Eigenschaft:Es wird empfohlen, Verwendung
this.app.getActiveNavs()
im Ionischen 3+ als getActiveNav() entfernt werden, in der nächsten major release, so kann eine Funktion geschrieben werden als:Druck auf die nav-stack, können Sie einfach importieren die Seite (sagen
YourPage
) dann:Alte Verhalten, für Ionic-2, veraltet in Ionic 3:
Können Sie
this.getActiveNav()
im Ionischen 2 (und Ionic-3), so kann eine Funktion geschrieben werden als:Entweder Methode, die Sie brauchen keine
import
oderprivate
variable für diese zu arbeiten. Wenn Sie in einerComponent
einfach finden Sie IhrApp
:Ok, ich habe gerade verwendet die nav anstelle der NavigationController und jetzt funktioniert es.
Behandelte ich es mit:
Antwort hier: github issues
Sie Ihren Namen nav falsch;
Sollte
Und überprüfen Sie, wenn Ihre Import-richtig
NavController
korrekt importiert. Das problem ist, dass es nicht injiziert werden hier. Er machte einen Verweis aufnav
schreiben@ViewChild(Nav) nav: Nav;
.Nav
erstrecktNavController
so kann es stattdessen verwendet werden.Eine Ursache für diesen Fehler, wenn Sie versuchen, zu injizieren
NavController
in eine provider-Klasse.Wie diese:
Hatte ich nur diesen Fehler...
Nach dem entfernen der Injektion (und refactoring der code), es funktionierte.