bug: vue swipe cancellation throws when the previous page is missing
Los mantenedores suelen responder en 1 día
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 78/100
- Tipo de issue
- Error
- Claridad
- Bien especificado
- Estado de actividad
- Activo
- Stack tecnológico
- javascript, typescript
- Área
- frontend, mobile-dev
Línea de trabajo
Comienza en la rama de cancelación de Ionic Vue IonRouterOutlet, en swipeHandler.onEnd(false), especialmente en la búsqueda mediante findViewItemByRouteInfo. Ejecuta la reproducción independiente con npm install y npm run dev, y después inspecciona la cobertura de regresión descrita para vistas faltantes, páginas desmontadas, cancelación normal, swipes completados y cancelación tardía. Se considera completado cuando la cancelación es segura sin una página montada previamente y la limpieza existente y los swipes completados siguen funcionando.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Prerequisites
- I have read the contributing guidelines and code of conduct.
- I have searched existing issues for this problem.
Ionic Framework Version
v9.x
Current Behavior
Ionic Vue's IonRouterOutlet cancellation branch (swipeHandler.onEnd(false)) unconditionally dereferences the view returned by findViewItemByRouteInfo and its ionPageElement.
If the callback runs after navigation has returned to a root route, there may be no previous view in that outlet. The callback throws:
TypeError: Cannot read properties of undefined (reading 'ionPageElement')
The same branch also throws if a view record exists but its page has been unmounted. This was observed in an iOS app using 9.0.3, with the stack pointing to the cancelled-animation callback in the core router outlet. The unguarded code is still present on main at 643584b3ac2ba1ca263cbf53960ccde3be2a96fc (9.0.6).
Expected Behavior
Cancellation should safely do nothing if there is no previous mounted page to hide. When the page exists, cancellation should continue setting aria-hidden="true" and ion-page-hidden. Completed swipes should continue navigating back.
Steps to Reproduce
- Download the four files in the reproduction gist into one directory.
- Run
npm installandnpm run devwith a supported Node version. - Open the displayed local URL and click Reproduce.
- Observe the TypeError in the page and console.
The reproduction uses the real Ionic Vue router and outlet. It pushes a second page, checks canStart(), returns to the first page, then explicitly delivers onEnd(false) to model a late cancellation callback. This is a deterministic callback-level reproduction, not a claim to reproduce the physical touch/animation race. There are no mocked view stacks or routers.
Code Reproduction URL
https://gist.github.com/dandoingdev/d7a6e044bf006bdb633aa32aaeffd410
Environment
Standalone reproduction: @ionic/vue 9.0.6, @ionic/vue-router 9.0.6, Vue 3.5.42, Vue Router 5.3.1, Vite 8.3.0. Confirmed in headless Chrome on macOS. No Ionic CLI or Capacitor is needed for the deterministic reproduction.
Additional Information
I have prepared a small guard for the missing view/page and regression tests, and will link the PR here. Tests cover missing views, unmounted pages, normal cancellation cleanup, completed swipes, and late cancellation after returning to the root using the real router.
- Lenguaje dominante
- TypeScript
- Estrellas
- 52.7k
- Forks
- 13.3k
- Merge medio
- 2 d 8 h
- PR fusionados (30 d)
- 52
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de ionic-team/ionic-framework
-
bug: ion-searchbar input is always labelled "search text"; aria-label on the host is not forwardedAbiertotriage
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
ionic-team/ionic-framework#31492 ·
Los mantenedores suelen responder en 1 día
-
bug: IonTabs throws when a Fragment contains one IonRouterOutletPosiblemente ocupada @Benziza la tomó hace 40 días. Abiertotriage
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
ionic-team/ionic-framework#31410 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
ionic-team/ionic-framework#31314 ·
Los mantenedores suelen responder en 1 día
-
triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 86/100
ionic-team/ionic-framework#31291 ·
Los mantenedores suelen responder en 1 día
-
triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
ionic-team/ionic-framework#30738 ·
Los mantenedores suelen responder en 1 día
Todos los issues de ionic-team/ionic-framework
Issues similares
-
Link Checker ReportAbiertoautomated issue report
Dificultad 2/5 1-3 horas Aptitud para principiantes 66/100
databendlabs/databend-docs#3511 ·
-
area/dashboard kind/bug QA/dev-automation
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
rancher/dashboard#19379 · 2 comentarios ·
Los mantenedores suelen responder en 5 días
-
perf(core): getComments() runs the approved count and the comment list as two sequential queriesAbiertoarea/core bot:bug bot:working
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
emdash-cms/emdash#3905 · 2 comentarios ·
Los mantenedores suelen responder en 1 día
-
community first-timers-only good first issue hacktoberfest help wanted low hanging fruit up-for-grabs
Dificultad 1/5 Menos de una hora Aptitud para principiantes 90/100
lingdojo/kana-dojo#31728 · 1 comentario · 5 reacciones ·
Los mantenedores suelen responder en 1 día
-
selective-claw: freshTailTurns=0 keeps ALL turns verbatim and summarizes none (slice(-0) === slice(0))Posiblemente ocupada @zjncs la tomó hoy. Abiertocomponent:tokenless
Dificultad 2/5 1-3 horas Aptitud para principiantes 80/100
agentic-os-org/ANOLISA#6112 · 1 comentario ·
Los mantenedores suelen responder en 1 día