Vue的组建重载
项目开发中遇到需要重载组件的需求,根据我自己的理解有3种方法
一、重新加载路由
相当于按F5 整个页面重载
location.reload();//js的方法
//重新替换当前路由 replace
this.$router.replace({
path:"/index/main?name=name",
name:"index"
});
//go(0)刷新当前页 go(-1) 返回上一页、
this.$router.go(0);
二、跳转到一个自定义空白页,再跳转回来
自定义一个Blank.vue,可以在空白页中做自己想做的事情,这里只提供一个思路
<template>
<div v-model="flag">
<!--可以在这个地方写一个加载框-->
</div>
</template>
<script>
export default{
data(){
return{
flag:true
}
},
mounted(){
this.$router.go(-1);
}
}
</script>
这种方法不会出现页面空白的现象,可根据个人需求使用
三、provide/inject的方式
这里是写在APP.vue中,但并不是只能写在这里,可以写在任何有router-view的地方.
这个方法本质上是通过flag控制router-view 的显隐
<template>
<div id="app">
<router-view v-if="flag"/>
</div>
</template>
<script>
export default{
name:"app",
provide(){
return {
reload:this.reload
}
},
data(){
return{
flag:true
}
},
methods:{
reload(){
this.flag = false;
this$nextTick(()=>{
this.flag = true;
})
}
}
}
</script>
在需要当前页面刷新的页面中注入App.vue组件提供(provide)的 reload 依赖,然后直接用this.reload来调用
<template>
<div >
<span @click="reload_page">刷新</span>
</div>
</template>
<script>
export default{
name:"app",
inject:['reload'],
methods:{
reload_page(){
this.reload()
}
}
}
</script>