考虑到我们对您的装载路线中发生的事情知之甚少,这是一个艰难的决定。
但...
我从来不需要构建加载路径,只需要在初始化/数据收集阶段在多条路径上呈现的加载组件即可。
关于没有加载路径的一个论点是,用户可能会直接(偶然地)直接导航到该URL,然后似乎没有足够的上下文来知道将用户发送到何处或采取什么措施。尽管这可能意味着它此时会陷入错误路线。总的来说,不是一个很好的经验。
另一个问题是,如果您简化了路线,则路线之间的导航会变得更加简单,并且无需使用即可实现预期/期望的行为 $router.replace
。
我了解这并不能解决您的问题。但我建议您重新考虑此加载路线。
应用程式
<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
为true,或者results
为null(但是您愿意),则可以根据需要创建一个伪造的数据集以进行迭代并创建框架版本。否则,您可以按照自己的方式保留事物。
this.$router.replace({path: "/results/xxxx"})