vue如何实现页面刷新

╰+哭是因爲堅強的太久メ 2022-11-27 08:46 398阅读 0赞

目录

1.this.$router.go(0)

2.location.reload()

3.跳转空白页再回跳

4.控制的显示隐藏

5.搭配provide/inject使用。

6.通过中央事件总线bus进行通讯传值,监听操作,重新调用数据接口


实际业务交互中,进行交互操作后,可能需要刷新页面来重新获取数据

刷新页面方法如下:

1.this.$router.go(0)

缺点:类似F5刷新,会出现瞬间白屏,体验不好

2.location.reload()

缺点:与方法1类似

3.跳转空白页再回跳

在需要刷新的地方写上:

  1. this.$router.push('/emptyPage')

跳转到空白页,在emptyPage.vue的beforeRouteEnter 钩子里控制页面跳转,从而达到刷新的效果

  1. beforeRouteEnter (to, from, next) {
  2. next(vm => {
  3. vm.$router.replace(from.path)
  4. })
  5. }

缺点:能看到路由快速变化

4.控制的显示隐藏

默认,isRouterAlive肯定是true,在需要刷新的时候把这个值设为false,接着再重新设为true

  1. this.isRouterAlive = false
  2. this.$nextTick(function () {
  3. this.isRouterAlive = true
  4. })

显示上无明显问题。

5.搭配provide/inject使用

provide/inject是vue组件通讯的一种方式,其它vue通讯方法也可适当搭配使用。

1.在App.vue页面或别的上级页面中定义provide,返回一个对象的函数,函数处理路由v-if变量的更改,如方法4。代码如下:

  1. <template>
  2. <div id="app">
  3. <router-view v-if="isRouterAlive" />
  4. </div>
  5. </template>
  6. <script>
  7. export default {
  8. name: "App",
  9. data() {
  10. return {
  11. isRouterAlive: true
  12. };
  13. },
  14. provide() {
  15. return {
  16. reload: this.reload
  17. };
  18. },
  19. methods: {
  20. reload() {
  21. this.isRouterAlive = false;
  22. this.$nextTick(() => {
  23. this.isRouterAlive = true;
  24. });
  25. }
  26. }
  27. };
  28. </script>
  29. <style></style>

2.在需要刷新的页面引入依赖:inject: [‘reload’]

3.在需要执行的地方直接调用方法即可:this.reload()

6.通过中央事件总线bus进行通讯传值,监听操作,重新调用数据接口

1.main.js中给vue绑定bus

  1. Vue.prototype.$bus = new Vue()

2.在组件的交互方法中使用$emit分发触发事件

  1. this.$emit('change')//chang:自定义方法名

3.在调用组件的页面中使用$on监听change,并调用方法重载数据

  1. mounted () {
  2. this.$bus.$on('change', ()=> {
  3. this.doSomething()//自定义获取数据方法,或调用方式4
  4. })
  5. }

发表评论

表情:
评论列表 (有 0 条评论,398人围观)

还没有评论,来说两句吧...

相关阅读

    相关 vue项目如何刷新当前页面

    > 最近开发了自定义的表单,作为dialog的形式存在在表格同页面的部分,表单提交后,我会吧相关的dialog弹框关闭,但是列表数据并没有进行相关的加载,但是我又不想windo