Ini adalah panggilan yang sulit mengingat sedikitnya yang kita ketahui tentang apa yang terjadi dalam rute pemuatan Anda.
Tapi...
Saya tidak pernah memiliki kebutuhan untuk membangun rute pemuatan, hanya komponen pemuatan yang akan diberikan pada beberapa rute selama tahap pengumpulan data.
Satu argumen untuk tidak memiliki rute pemuatan adalah bahwa pengguna berpotensi menavigasi langsung ke URL ini (secara tidak sengaja) dan kemudian sepertinya tidak akan memiliki konteks yang cukup untuk mengetahui ke mana harus mengirim pengguna atau tindakan apa yang harus diambil. Meskipun ini bisa berarti bahwa ia jatuh ke rute kesalahan pada titik ini. Secara keseluruhan, bukan pengalaman hebat.
Lain adalah bahwa jika Anda menyederhanakan rute Anda, navigasi antar rute menjadi lebih sederhana dan berperilaku seperti yang diharapkan / diinginkan tanpa menggunakan $router.replace
.
Saya mengerti ini tidak menyelesaikan pertanyaan dengan cara Anda bertanya. Tapi saya sarankan memikirkan kembali rute pemuatan ini.
Aplikasi
<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')
Kulit
<div>
<header>
<nav>...</nav>
</header>
<main>
<slot></slot>
</main>
</div>
Halaman Utama
<section>
<form>...</form>
</section>
{
methods: {
onSubmit() {
// ...
this.$router.push('/results')
}
}
}
Halaman Hasil
<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
}
})
}
}
}
Komponen Hasil
Pada dasarnya komponen hasil yang sama persis sudah Anda miliki, tetapi jika loading
itu benar, atau jika results
adalah nol, bagaimanapun Anda suka, Anda dapat membuat dataset palsu untuk beralih dan membuat versi kerangka, jika Anda mau. Kalau tidak, Anda bisa menyimpan barang-barang seperti yang Anda miliki.
this.$router.replace({path: "/results/xxxx"})