2016-06-24 35 views
7

Ho seguito l'esempio dato su Ionic2 modals e non ricevo errori, ma quando faccio clic sulla scheda che dovrebbe iniziare il modale non succede niente.Ionic 2 Modal non visualizzato

Ecco il codice per il modal sé:

@Component ({ 
    template: ` 
     <ion-card class='popover'> 
      <ion-card-content> 
       Hello 
      </ion-card-content> 
     </ion-card> 
    ` 
}) 

export class AccModal { 

    dumbData: number; 
    constructor() { 
     console.log("constructor"); 
     this.dumbData= 22; 
    } 
} 

La pagina in cui sarà presentato il mio modale si presenta così:

<ion-card (click)='presentModal()' class='custom-card'> 
    <ion-card-header> 
     Sched. Accuracy 
    </ion-card-header> 
    <ion-card-content> 
     71% 
    </ion-card-content> 
</ion-card> 

Con il dattiloscritto in questo modo:

presentModal() { 
    let myModal = Modal.create(AccModal, {param: "something"}); 
    console.log('myModal is ', myModal); 
    this.nav.present(myModal); 
    console.log("function being called"); 
} 

Il console.log nello presentModal è stato registrato ma quello nel costruttore di il modale NON è. Sono in perdita su cosa fare perché non sono sicuro al 100% che cosa sta succedendo?

UPDATE

Quando il debug nella nav.present (funzione Nav Controller) qui è quello che vedo:

if (rootNav['_tabs']) { 
    // TODO: must have until this goes in 
    // https://github.com/angular/angular/issues/5481 
    void 0; 
    return; 
} 

Il mio progetto non ha schede in modo che la dichiarazione restituisce true e la funzione presente mi restituisce effettivamente uno 0 e lo chiama buono. Nel mio package.json le mie versioni ioniche sono: "ionic-angular": "^2.0.0-beta.8", "ionic-native": "^1.1.0"

Speriamo che questa aggiunta di informazioni aiuti a diagnosticare qualcuno più intelligente di me.

UPDATE 2:

ho aggiornato all'ultima ionica 2 rilascio in 2.0.0-beta.9. Tuttavia, quando il debug nella console cromata vedo ancora il codice di cui sopra nella mia funzione nav.present nel codice ionico-angolare, anche se, quando lo guardo nel mio proprio codice vedo questo:

if (rootNav['_tabs']) { 
    // TODO: must have until this goes in 
    // https://github.com/angular/angular/issues/5481 
    console.error('A parent <ion-nav> is required for ActionSheet/Alert/Modal/Loading'); 
    return; 
} 

Ho svuotato la cache e ho ricaricato la pagina e il vecchio codice si presenta ancora. Devo perdere la testa. Qualche idea su questo sarebbe sorprendente.

Update 3

Ecco il codice per le mie schede. Il live in app.html e la variabile index è solo un modo per avviare l'app nella scheda giusta. Si inizia come 1 (o la seconda scheda):

<ion-tabs greenTheme [selectedIndex]="index"> 
    <ion-tab tabIcon="people" #content tabTitle="My Roster" [root]="tab2"></ion-tab> 
    <ion-tab tabIcon="stats" #content tabTitle="Wage Overview" [root]="tab1"></ion-tab> 
</ion-tabs> 
+0

È il tuo this.nav il tuo controller nav? – Drakee510

+0

Sì. Spiacente, ho omesso il costruttore – discodane

+0

'.present (myModal)' restituisce una promessa. Prova a fare '.present (myModal) .then ((res) => {debugger;}). Catch ((err) => {debugger;})' per vedere se vengono restituite informazioni utili qui –

risposta

1

Nella ionica 2 beta 11, l'aggiornamento ha risolto il problema. L'unica differenza nel mio codice dall'esempio here on ionic's site è il modello per la mia modale. Super semplice e intuitivo su come è fatto.

-1

Importare il NavController nel costruttore in questo modo:

constructor(private navController: NavController) { 
    // Whatever goes here 
} 

e il metodo di chiamata this.navController.present(myModal);

+0

Scusa. Quello che intendevo dire nel mio commento era che I AM importava il controller nav proprio come se fossi qui (eccetto il mio si chiama solo nav). Non penso sia necessario aggiungerlo al codice nella mia domanda. – discodane

5

so nulla del codice che gestisce le schede, ma ho creato un Plunker con il codice in questo post (e una modifica piuttosto piccola), e la modale appare correttamente.

Il cambiamento che ho fatto, è nel codice modale:

// Add NavParams to use it later in the modal's constructor 
import { ..., NavParams } from 'ionic-angular'; 

@Component ({ 
    template: ` 
     <ion-card class='popover'> 
      <ion-card-content> 
       Hello 
      </ion-card-content> 
     </ion-card> 
    ` 
}) 
export class AccModal { 

    private dumbData: number; 

    // I've added the params variable, because you're calling this constructor 
    // with a parameter (called 'param' and with the 'something' value) 
    constructor(private params: NavParams) { 

    console.log("constructor"); 
    this.dumbData= 22; 

    // You can see in the console the parameter being printed properly 
    console.log('Param:', params.get('param')); 
} 

} 

Si può giocare con this plunker (Ionic2 beta.9).

====================================

UPDATE:

Ho aggiornato il plunker per includere un layout tab e funziona come previsto.

Il live nel app.html ...

ho cercato di farlo funzionare tra cui le schede della app.html, ma non poteva farlo. Quindi, ho aggiunto le schede in un home page che contiene solo entrambe le schede e nel app.ts ho appena impostato this.rootPage = HomePage; in modo che sia la prima pagina dell'applicazione. Puoi provare a farlo nella tua app, per vedere se includere le schede nella pagina app potrebbe essere realizzato per il problema?

+0

Penso che il problema delle schede sia il punto cruciale del problema perché, come mostrato nel codice sopra, la funzione presente controlla prima se il nav ha le schede e se lo fa, restituisce 0, in pratica non esegue il rendering della mia modale. – discodane

+0

C'è un modo semplice per replicare il codice relativo alle tue schede in quel plunker? In questo modo sarei in grado di eseguire il debug e dare un'occhiata più da vicino a cosa sta succedendo internamente. – sebaferreras

+0

Ho aggiunto la mia scheda html. Nell'app.js ho assegnato le variabili tab1 e ​​tab2 ai componenti reali che fungono da pagina personale. – discodane

Problemi correlati