Esta es una decisión difícil considerando lo poco que sabemos sobre lo que ocurre en su ruta de carga.
Pero...
Nunca he tenido la necesidad de construir una ruta de carga, solo cargando los componentes que se procesan en varias rutas durante la etapa de inicio / recopilación de datos.
Un argumento para no tener una ruta de carga sería que un usuario podría navegar directamente a esta URL (accidentalmente) y luego parece que no tendría suficiente contexto para saber dónde enviar al usuario o qué acción tomar. Aunque esto podría significar que cae en una ruta de error en este momento. En general, no fue una gran experiencia.
Otra es que si simplifica sus rutas, la navegación entre rutas se vuelve mucho más simple y se comporta como se esperaba / desea sin el uso de $router.replace
.
Entiendo que esto no resuelve la pregunta en la forma en que la preguntas. Pero sugeriría repensar esta ruta de carga.
App
<shell>
<router-view></router-view>
</shell>
const routes = [
{ path: '/', component: Main },
{ path: '/results', component: Results }
]
const router = new VueRouter({
routes,
})
const app = new Vue({
router
}).$mount('#app')
Cáscara
<div>
<header>
<nav>...</nav>
</header>
<main>
<slot></slot>
</main>
</div>
Pagina principal
<section>
<form>...</form>
</section>
{
methods: {
onSubmit() {
// ...
this.$router.push('/results')
}
}
}
Página de resultados
<section>
<error v-if="error" :error="error" />
<results v-if="!error" :loading="loading" :results="results" />
<loading v-if="loading" :percentage="loadingPercentage" />
</section>
{
components: {
error: Error,
results: Results,
},
data() {
return {
loading: false,
error: null,
results: null,
}
},
created () {
this.fetchData()
},
watch: {
'$route': 'fetchData'
},
methods: {
fetchData () {
this.error = this.results = null
this.loading = true
getResults((err, results) => {
this.loading = false
if (err) {
this.error = err.toString()
} else {
this.results = results
}
})
}
}
}
Componente de resultados
Básicamente, el mismo componente de resultados exactos que ya tiene, pero si loading
es verdadero o si results
es nulo, como prefiera, puede crear un conjunto de datos falso para iterar y crear versiones de esqueleto, si lo desea. De lo contrario, puede mantener las cosas como las tiene.
this.$router.replace({path: "/results/xxxx"})