Como funciona
Cada <RouterView> renderiza um Frame do NativeScript. As páginas são montadas com $navigateTo, dentro de um pequeno wrapper que fornece a rota delas e um router ligado à pilha delas. O NativeScript-Vue monta cada página como um app próprio, então nada fornecido pelo <RouterView> chegaria a elas de outro jeito.
O router nunca guarda um histórico próprio. Depois de cada navigatedTo, ele lê frame.backStack e a página atual e os espelha. Pops que ele não iniciou, como um swipe no iOS, são captados do mesmo jeito que os dele. O replace marca a entrada atual com backstackVisible: false antes de navegar, que é como o frame descarta uma página nativamente.
Onde ele fala com a plataforma
- Botão de voltar do Android:
activityBackPressed, cancelado e transformado emrouter.back()para os leave guards terem voz. No Android 14 ou mais novo, umOnBackPressedCallbackacima do do core acompanha o swipe e entrega o progresso aouseBackGesture(). - Swipe de voltar do iOS:
enableSwipeBackNavigationdesligado enquanto um leave guard está ativo. - Botão de voltar do iOS:
UINavigationItem.backAction(iOS 16) enquanto um leave guard está ativo. - Modais:
modalInPresentationenquanto um leave guard está ativo, e um delegate na frente do do core para ouvir um swipe segurado. - Abas: um delegate na frente do da barra de abas no iOS, touch listeners na faixa de abas no Android, para ouvir um toque na aba selecionada.
Testes
Os testes rodam contra um substituto do Frame do NativeScript (test/shims/core.ts). Ele segue a ordem do real: as navegações terminam num tick posterior, e as páginas descartadas são liberadas antes do navigatedTo disparar. As partes acima que tocam a plataforma são exercitadas por pequenas costuras que o shim consegue chamar, e conferidas em aparelhos uma a uma.