Búsqueda de sitios web

angular - Enlace profundo de Ionic


He creado mi primera aplicación Ionic con Deep Linking. Tuve que renunciar a la carga diferida con enlaces profundos por ahora... Pero estoy confundido por la manera en que las URLs permanecen cuando navegas a otro lugar, como volver a la página de inicio. ¿Cómo manejan esto las personas? ¿Simplemente haciendo algún tipo de reescritura de URL? ¿O es probable que eso rompa otra cosa? Parece que tampoco se puede borrar fácilmente la URL, ya que vuelve a aparecer.

He visto el blog de Ionic y las acaloradas discusiones en los issues de Github sobre el comportamiento.

Parece que el @IonicPage da cierto control sobre la personalización de cosas, pero eso es solo para carga diferida/módulos, ¿verdad? ¿O se puede usar la anotación sin carga diferida?

Cualquier consejo sobre la mejor manera de trabajar con esto sería apreciado.

También noté otro comportamiento extraño, en que la estructura de datos que usé para mantener una referencia a la HomePage se volvió indefinida, aunque fue exportada como una constante. Era el rootNav inicial cuando la aplicación se lanza. Tuve que hacer un truco improvisado para solucionarlo, condicionando para ello

if (page.home != undefined) { //Bug in Ionic perhaps
   this.nav.setRoot(HomePage, params)
   .catch((err: any) => {
          console.log(`Didn't set HOME root: ${err}`);
   }); 
} else {
   this.nav.setRoot(page.component, params)
   .catch((err: any) => {
          console.log(`Didn't set nav root: ${err}`);
    });
}

Consola console.log de Chrome

Estructura de datos PageInterface

Parte de la constante que perdió 'HomePage', en la clave del componente de la clase que importé.

¿Es esto algo que otros han experimentado? Algún consejo, o errores evidentes que no estoy viendo. Salud.

Respuesta #1

En primer lugar, la navegación en Ionic es bastante inestable desde la versión 3.6.0 (especialmente con pestañas) donde refactorizaron la forma en que se generan las URLs (ahora son más legibles). Como ya mencionaste, hay muchos problemas abiertos en GitHub que se resolverán en las próximas semanas según el equipo (actualmente están muy ocupados refactorizando todo el framework para la versión 4 de Ionic).

Para responder a tu pregunta sobre el decorador IonicPage: También puedes usarlo sin cargar las páginas de forma diferida: En tu módulo principal app.module.ts agrega lo siguiente:

imports: [
    BrowserModule,
    IonicModule.forRoot(MyApp, {
      preloadModules: true
    })
],

preloadModules: true le indica a Ionic que deseas cargar tus páginas de forma inmediata (no perezosa). Y en tus decoradores IonicPage puedes configurar con qué prioridad se cargan los módulos al iniciar:

@IonicPage({
  name: 'my-page',
  priority: 'high'
})

Para la propiedad priority están disponibles los valores high, low y off. off significa que la página se carga de manera perezosa. Puedes encontrar esto en la documentación del decorador IonicPage.