นี่เป็นการโทรที่ยากลำบากเมื่อพิจารณาว่าเรารู้เพียงเล็กน้อยเกี่ยวกับสิ่งที่เกิดขึ้นในเส้นทางการโหลดของคุณ
แต่...
ฉันไม่เคยต้องการสร้างเส้นทางการโหลดเพียง แต่เคยโหลดส่วนประกอบที่สร้างการแสดงผลหลายเส้นทางในช่วงเริ่มต้น / ขั้นตอนการรวบรวมข้อมูล
อาร์กิวเมนต์หนึ่งที่ไม่มีเส้นทางการโหลดอาจเป็นได้ว่าผู้ใช้สามารถนำทางไปยัง URL นี้ได้โดยตรง (โดยไม่ตั้งใจ) และดูเหมือนว่าจะไม่มีบริบทเพียงพอที่จะรู้ว่าจะส่งผู้ใช้ไปยังที่ใดหรือดำเนินการอย่างไร แม้ว่านี่อาจหมายความว่ามันผ่านไปยังเส้นทางที่ผิดพลาด ณ จุดนี้ โดยรวมแล้วไม่ใช่ประสบการณ์ที่ดี
ก็คือว่าถ้าคุณลดความซับซ้อนของเส้นทางของคุณนำทางระหว่างเส้นทางที่จะกลายเป็นง่ายมากและจะทำงานตามที่คาดไว้ / $router.replace
ต้องการโดยไม่ต้องใช้ของ
ฉันเข้าใจว่าสิ่งนี้ไม่ได้แก้ปัญหาในแบบที่คุณถาม แต่ฉันขอแนะนำให้คิดใหม่เส้นทางการโหลดนี้
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')
เปลือก
<div>
<header>
<nav>...</nav>
</header>
<main>
<slot></slot>
</main>
</div>
หน้าหลัก
<section>
<form>...</form>
</section>
{
methods: {
onSubmit() {
// ...
this.$router.push('/results')
}
}
}
หน้าผลลัพธ์
<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
}
})
}
}
}
องค์ประกอบผลลัพธ์
โดยทั่วไปส่วนประกอบของผลลัพธ์ที่แน่นอนที่คุณมีอยู่แล้ว แต่ถ้าloading
เป็นจริงหรือถ้าresults
เป็นโมฆะ แต่คุณต้องการคุณสามารถสร้างชุดข้อมูลปลอมเพื่อทำซ้ำและสร้างโครงกระดูกหากคุณต้องการ มิฉะนั้นคุณสามารถเก็บสิ่งต่าง ๆ ในแบบที่คุณมี
this.$router.replace({path: "/results/xxxx"})