Using accessibility on iOS (VoiceOver) speaks prior page after router push

my app is native only, for blind/low vision,

so I have a timed splash page,
and after the timeout, I use router.push(name…) to get to the next page

either
one time config (that then routes to selection page)
or
the selection page…

after the push, the correct view (component) is shown
however, the accessibility info still sees the prior page… (as if the page didn’t change)

is there some ‘flush’ mechanism I need to define on the routes?
my startup component routes to Config or Select

practically speaking there is no going back to the splash page

there are back buttons on navigate (to select) and select(to config) and those work

my router definition

import { createRouter, createWebHistory } from '@ionic/vue-router';
import { RouteRecordRaw } from 'vue-router';
import Select from '../views/Select.vue'
import Config from '../views/Config.vue'
import Navigater from '../views/Navigater.vue'
import Startup from '../components/Startup.vue';

const routes: Array<RouteRecordRaw> = [
  {
    path: '/',
    redirect: '/startup'
  },
  {
    path: '/startup',
    name: 'Startup',
    component: Startup
  },
  {
    path: '/Select',
    name: 'Select',
    component: Select,
    props: true
  },
  {
    path: '/Config',
    name: 'Config',
    component: Config,
    props: true
  },
  {
    path: '/Navigater',
    name: 'Navigater',
    component: Navigater,
    props: true
  }
]

const router = createRouter({
  history: createWebHistory(process.env.BASE_URL),
  routes
})

the router doc talks about

shared and nested
See Shared URLs versus Nested Routes for more information.

I’m not doing either of those…

looking at the web view of the app I see this on all the page transitions

runtime-core.esm-bundler.js?5c40:38 [Vue warn]: Extraneous non-props attributes (isInOutlet, registerIonPage) were passed to component but could not be automatically inherited because component renders fragment or text root nodes.

looks like this problem is because I have multiple root routes

i don’t seem to understand how to configure the router construction

startup → config → select → navigate
back to select, repeat
or
/ redirects to startup
startup ->select ->navigate
back to select, repeat

these are not really children , more workflow, mostly never to return
each passes props to the next (vs using vuex to hold the data)

so i changed over to nested routes (I think)

const routes: Array<RouteRecordRaw> = [
  {
    path: '/f',
    name: 'Startup',
    component: Startup,
    children: [
      {
        path: '/f/Select',
        name: 'Select',
        component: Select,
        props: true
      },
      {
        path: '/f/Config',
        name: 'Config',
        component: Config,
        props: true
      },
      {
        path: '/f/Navigater',
        name: 'Navigater',
        component: Navigater,
        props: true
      }
    ]
  }
]

i am using named routes, so i can pass params.

anyhow the router push changes the url
but the component is never loaded, but no errors are reported

				console.log("attempting to route to "+self.globalData.nextPage)
				setTimeout(()=>{
					console.log("routing now")
					self.$router.push({name: self.globalData.nextPage, params : {gender: Gender}}).then(()=>{
						console.log("route request successful");
					}).catch(failure => {
						console.log("navigation failure="+JSON.stringify(failure));
						})
				}, 5000)

and on the web dev console

attempting to route to Config
Startup.vue?818c:52 routing now
Startup.vue?818c:54 route request successful

and the new url is

http://localhost:8100/f/Config

so it found the name in the table
i changed the ‘name’ to a string different from the actual path,
and it correctly found the entry, and if I tried to find the old name it failed with unmatched…

so it got the entry to the component, but didn’t load it…
i have a log entry in the created() method of the new component

what did I miss?

I tried changing over to path vs named routes
only difference is
a warning on the dev console , which I expected

vue-router.esm-bundler.js?6c02:72 [Vue Router warn]: Path "/f/Config" was passed with params but they will be ignored. Use a named route alongside params instead.

the new component is not loaded however

so, i reread the doc and the router choices,

shared url vs nested

so I tried shared url …

but…
this is result of startup, config and select components
(same as with multiple-root paths)

all the ion-pages are loaded together in a single html dom

<ion-app class="md ion-page hydrated">
<ion-router-outlet class="hydrated">

    <div class="ion-page " aria-hidden="true">
    <ion-title class="md title-default hydrated" role="alert" >kjljkljkljkljkl </ion-title>
    <ion-content class="md hydrated" padding="" style="--offset-top:479px; --offset-bottom:0px;">
    <ion-img class="md hydrated" id="logo">
    </ion-img>
    </ion-content>
    </div>

    <div class="ion-page" data-v-4eda24fc="">
    <ion-title class="md title-default hydrated" role="alert" >jhhjhjkhjkhjkjhkhjkjkhjkhhjkhjk</ion-title>
    <ion-content class="md hydrated" data-v-4eda24fc="" style="--offset-top:479px; --offset-bottom:0px;">
    <ion-row class="md hydrated " data-v-4eda24fc="">
    <ion-button class="ion-color ion-color-primary md button button-large button-solid ion-activatable ion-focusable hydrated  role="button" data-v-4eda24fc="" color="primary" size="large"> Yes 
    </ion-button> or 
    <ion-button class="ion-color ion-color-warning md button button-large button-solid ion-activatable ion-focusable hydrated " role="button" data-v-4eda24fc="" color="warning" size="large"> No 
    </ion-button>
    </ion-row>
    <ion-row class="md hydrated submit-row" data-v-4eda24fc="">
    <ion-button class="ion-color ion-color-success md button button-solid ion-activatable ion-focusable hydrated save-button" role="burron" data-v-4eda24fc="" color="success">Save
    </ion-button>
    </ion-row>
    </ion-content>
    </div>

    <div class="ion-page " data-v-8ad32c94="">
    <ion-title class="md title-default hydrated" role="alert" >hi g jheg jgdfafd</ion-title>
    <ion-content class="md hydrated" data-v-8ad32c94="" style="--offset-top:479px; --offset-bottom:0px;">
    <div id="container" data-v-8ad32c94="">
    <ion-row class="md hydrated " data-v-8ad32c94="">
    <!--  v-for="(label,i) in labels" :key="i" -->
    <ion-button class="ion-color  md button button-solid ion-activatable ion-focusable hydrated"  data-v-8ad32c94="" color="fff">wwqewew
    </ion-button>
    </ion-row>
    <ion-row class="md hydrated " data-v-8ad32c94="">
    <ion-button class="ion-color  md button button-solid ion-activatable ion-focusable hydrated"  data-v-8ad32c94="" color="eeee">dfasdf
    </ion-button>
    </ion-row>
    <ion-row class="md hydrated " data-v-8ad32c94="">
    <ion-button class="ion-color  md button button-solid ion-activatable ion-focusable hydrated"  data-v-8ad32c94="" color="fdfsdf">trt
    </ion-button>
    </ion-row>
    </div>
    </ion-content>
    </div>

</ion-router-outlet>
</ion-app>

how do I fix this, from an accessibility perspective this one HUGE page, with confusing content and navigation

or is this the framework architecture? maybe ok in an SPA architected application

Hard to say what the issue might be without being able to reproduce it on my end. Can you provide a link to a GitHub repo that shows this issue happening in an Ionic starter app?

ok, let me put something together.