• Vue3——使用inject和provide对页面进行刷新


    使用inject和provide对页面进行刷新

    这里的provide和inject可以实现嵌套组件之间进行传递数据。

    1. 这两个函数都是在setup语法中使用;
    2. 父级组件使用provide向下进行传递数据;
    3. 子级组件使用inject来获取上级组件传递过来的数据;
      注意:provide只能够向下进行传递数据;在使用provide和inject的时候需从vue中引入

    使用方法:

    直接看代码即可:

    <script setup lang="ts">
    import {provide, ref, nextTick  } from "vue";
    const isRouterAlive  = ref(true);
    const reload = () => {
          isRouterAlive.value = false;
          nextTick(() => {
            isRouterAlive.value = true
          })
        }
        provide("reload", reload);
    script>
    
    <template>
      
      <router-view v-if="isRouterAlive">router-view>
    template>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    首先,需要修改一下app.vue文件,通过reload方法来控制router-view的显示或者隐藏

    <template>
      
      <router-view v-if="isRouterAlive">router-view>
    template>
    
    • 1
    • 2
    • 3
    • 4
    const isRouterAlive  = ref(true);
    const reload = () => {
          isRouterAlive.value = false;
          nextTick(() => {
            isRouterAlive.value = true
          })
        }
        provide("reload", reload);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    写好之后就可以在子页面中调用即可

    使用inject调用provide的方法

    // 这里是自组建
    // 先引入
    import { ref, onMounted, reactive ,inject} from "vue";
    
    const myFn = inject<any>("reload");
    // 最后在需要使用的页面中调用这个方法myFn() 
    // 比如可以放在点击事件中
    const btn =()=>{
        myFn()
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    最后看一下项目实现效果:
    请添加图片描述


    这时候就有人问了,为什么不适用location.reload()或者router.go(0)来刷新页面呢?
    这里的缺点也显而易见,这种刷新就类似于ctrl+F5来进行强制刷新,整张页面看起来会出现白屏的现象,用户交互的体验感不好,而这种用provide和inject方法不会出现白屏现象。
    请添加图片描述

    不会向F5刷新页面那样刷新数据。所以比较推荐大家使用这种方法。

  • 相关阅读:
    【RuoYi-Vue-Plus】扩展笔记 03 - 实现简单的 EasyExcel 自定义导入监听器
    Centos安装FFmpeg
    Linux安装Redis数据库,无需公网IP实现远程连接
    深入Android系统基础知识及基本概念
    12.Node.js模块化:CommonJS 标准和ECMAScript标准
    如何保持电机安全运行
    用anacnda创建虚拟环境用不用指定python版本
    前端性能精进(七)——构建
    【大数据】Hadoop三大核心组件入门
    【论文速读,找找启发点】2024/6/16
  • 原文地址:https://blog.csdn.net/nanchen_J/article/details/126936855