Bu, yükleme rotanızda olup bitenler hakkında ne kadar az şey bildiğimizi düşünmek zor bir çağrı.
Fakat...
Bir yükleme rotası oluşturmaya hiç ihtiyacım olmadı, sadece init / veri toplama aşamasında birden fazla rotada işlenen bileşenler yükleniyor.
Bir yükleme rotasına sahip olmamanın bir argümanı, bir kullanıcının potansiyel olarak doğrudan bu URL'ye (yanlışlıkla) gidebileceği ve daha sonra kullanıcıyı nereye göndereceğini veya hangi işlemi yapacağını bilmek için yeterli içeriğe sahip olmayacağıdır. Bu, bu noktada bir hata yoluna düştüğü anlamına gelebilir. Genel olarak, büyük bir deneyim.
Bir diğeri, rotalarınızı basitleştirirseniz, rotalar arasında gezinmenin çok daha basit hale gelmesi ve kullanılmadan beklendiği / istendiği gibi davranmasıdır $router.replace
.
Bunun soruyu sorduğunuz şekilde çözmediğini anlıyorum. Ancak bu yükleme rotasını yeniden düşünmenizi öneririm.
Uygulama
<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')
Kabuk
<div>
<header>
<nav>...</nav>
</header>
<main>
<slot></slot>
</main>
</div>
Ana Sayfa
<section>
<form>...</form>
</section>
{
methods: {
onSubmit() {
// ...
this.$router.push('/results')
}
}
}
Sonuçlar Sayfası
<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
}
})
}
}
}
Sonuçlar Bileşeni
Temel olarak, zaten sahip olduğunuz sonuçlarla aynıdır, ancak loading
doğruysa veya results
null ise, ancak tercih ederseniz, yinelemek için sahte bir veri kümesi oluşturabilir ve isterseniz iskelet sürümleri oluşturabilirsiniz. Aksi takdirde, işleri sahip olduğunuz şekilde tutabilirsiniz.
this.$router.replace({path: "/results/xxxx"})