Je rencontre de temps en temps l'erreur suivante.
ERROR Error: Uncaught (in promise): invalid link:MenuPage
at d (polyfills.js:3)
at l (polyfills.js:3)
at Object.reject (polyfills.js:3)
at NavControllerBase._fireError (nav-controller-base.js:322)
at NavControllerBase._failed (nav-controller-base.js:310)
at nav-controller-base.js:365
at t.invoke (polyfills.js:3)
at Object.onInvoke (core.es5.js:4125)
at t.invoke (polyfills.js:3)
at n.run (polyfills.js:3)
at polyfills.js:3
at t.invokeTask (polyfills.js:3)
at Object.onInvokeTask (core.es5.js:4116)
at t.invokeTask (polyfills.js:3)
at n.runTask (polyfills.js:3)
Je ne suis au courant d'aucune procédure pour reproduire et cette erreur ne pose aucun problème L'application fonctionne normalement et la page de menu s'affiche correctement.
import { Component, ViewChild } from '@angular/core';
import { IonicPage, NavController, NavParams } from 'ionic-angular';
import { Nav, Platform } from 'ionic-angular';
@IonicPage({
name: "menu",
segment: "app"
}
)
@Component({
selector: 'page-menu',
templateUrl: 'menu.html'
})
export class MenuPage {}
J'avais vérifié mon projet et la page de menu n'est utilisée que par sa IonicPage
nom "menu"
.
Il existe déjà un forum ionique post mais je suis déjà la solution acceptée proposée qui consiste à donner un nom à l’annotation IonicPage
.
La même chose m'arrive parfois. De même, je n'ai pas pu déterminer d'où venait l'erreur, car cela n'arrive que rarement. Cela ressemble à un bug avec les scripts de l'application, car arrêter et démarrer "Ion Serv" semble résoudre le problème.
Redémarrez votre serveur et tout ira bien.
Je ne vous vois pas mentionner quoi que ce soit à propos d'un fichier menu.module.ts
. Pour configurer le chargement paresseux, vous avez besoin d’un fichier de module par page/composant.
Ce fichier est requis pour permettre à Ionic de savoir quels composants doivent être chargés lors de l’initialisation de votre page. Voici un exemple de fichier de module pour une page:
import { NgModule } from '@angular/core';
import { IonicPageModule } from 'ionic-angular';
import { MenuPage } from './menu.page';
import { SomeComponentModule } from '../../components/some/some.component.module';
@NgModule({
declarations: [
MenuPage
],
imports: [
IonicPageModule.forChild(MenuPage),
HeaderComponentModule
],
exports: [
MenuPage
]
})
export class MenuPageModule { }
Le composant dans ce fichier est juste un exemple. Donc, si vous avez un composant appelé SomeComponent dans votre projet. Ensuite, vous devriez l'importer dans votre page.module, uniquement si vous utilisez ce composant dans votre page bien sûr.
SomeComponent a également un fichier de module qui exporte le SomeComponent en tant que SomeComponentModule qui peut être importé dans le fichier page.module.
L'ajout de IonicPageModule.forChild(MenuPage)
aux importations est également requis.
Enfin, si vous avez créé un fichier de module par composant/page, vous pouvez supprimer toutes les importations de composant/page de votre fichier app.module.ts
.
Le reste que vous avez mentionné est configuré correctement. L'annotation IonicPage()
est toujours requise par page et vous devriez être capable de naviguer à l'aide de this.navCtrl.Push('menu')
puisque vous avez défini le nom sur 'menu'.
REMARQUE: assurez-vous que le nom de fichier de votre fichier de module porte le même nom que le nom de la page nom de fichier, auquel est ajouté .module
. Par exemple, un fichier de page menu.ts
doit avoir un fichier menu.module.ts
correspondant.
Si vous n'avez pas redémarré votre serveur après avoir ajouté votre nouvelle page (ici, MenuPage), arrêtez et redémarrez le service ionique. L'erreur sera résolue.
Dans MenuPage.ts: Ajoutez ceci sur la classe MenuPage:
@IonicPage(
{
name: 'tabs-page'
})
Dans app.components.ts
rootPage: string = 'tabs-page';
Essayez-le!
J'ai eu cette erreur quand je faisais quelque chose comme
@ViewChild(Nav) nav: Nav;
...
openPage(page:string) {
this.nav.setRoot(page);
}
J'ai fini par comprendre que le littéral transmis était invalide. Je ne voulais plus de fautes de frappe ni de majuscules au lieu de minuscules dans les noms, centralisant ce genre de choses.
En conséquence, j'ai défini une énumération de pages et l'ai utilisée partout.
export enum Page {
HOME = <any>'HomePage',
LOGIN = <any>'LoginPage'
}
Puis utilisé quelque chose comme:
openPage(Page.LOGIN);
Je l'ai traqué via view-controller.js dans "ionic-angular": "3.6.0"
J'ai eu un problème similaire. Résolu le problème en remplaçant "@ ionic/app-scripts" par la version "2.1.3" sous devDependencies.
"devDependencies": {
"@angular/tsc-wrapped": "^4.4.6",
"@ionic/app-scripts": "2.1.3",
"TypeScript": "2.4.0" }
j'ai eu le même problème et je peux résoudre ce problème en créant l'archive module.ts pour mi page dans ce cas, c'était des onglets
import { TabsPage } from './tabs';
import { NgModule } from '@angular/core';
import { IonicPageModule } from 'ionic-angular';
@NgModule({
declarations: [
TabsPage
],
imports: [
IonicPageModule.forChild(TabsPage),
],
exports: [
TabsPage
]
})
export class MenuPageModule { }
ce n'est que si cela a été ajouté que l'importation, les déclarations et entryComponents du fichier app.module.ts suppriment cela Tout ce processus fonctionne bien pour moi.
J'étudie aussi la charge paresseuse dans Ionic 3.… Aujourd'hui, j'ai eu un problème avec elle. Cette vidéo explique comment l'utiliser Ionic 3 - Modules de chargement différés/Routes
Je n'ai pas besoin d'utiliser @IonicPage ({name: 'nom-de-ma-page'}), il suffit de suivre les étapes de la vidéo et de travailler parfaitement pour moi.
J'espère que ça va t'aider aussi.
Si vous souhaitez charger des composants paresseux:
Ajoutez simplement le décorateur @IonicPage()
au-dessus du décorateur @Component
importé de 'ionic-angular' et redémarrez votre serveur après avoir enregistré votre travail.
Exemple:
....
import { IonicPage, NavController, NavParams, AlertController } from 'ionic-angular';
....
@IonicPage()
@Component({
templateUrl : '',
})
export class XYZ{
........
}
Assurez-vous de ne pas ajouter la même page dans le fichier app.module.ts, ni dans le tableau de déclarations, ni dans le tableau d'import.