vue项目中弹框新增刷新问题

一直忙没有时间管理博客,现在抽出点时间,对自己在项目中遇到的问题做出总结,如若能帮到诸君少踩坑,也未尝不是件美事,还望不喜勿喷哟。此处以Vue为例。
需求:后台管理中,免不了增删改查,在增的时候点击一个新增按钮,数据是填进去了,但会发现新增的页面还保留着,有的时候页面是消失了但第二次点击的时候第一次的数据还在,也就是不做刷新,提供两种方案,一、做watch监听,二、做刷新,在此我先做刷新,watch监听后续再补充。(注:路由跳转不适合本方法,人家路由自己就刷新了)
一个小的新增弹框
第一种刷新,页面整体刷新,$reload方法:
在APP.vue组件中data函数里面定义

 data() {
    return {
      isRouterAlive: true,
    };
  },

在这里插入图片描述
接着在methods中定义relaod函数:

 methods: {
    reload() {
      this.isRouterAlive = false;
      this.$nextTick(function () {
        //在下次dom更新循环结束之后执行延迟回调。数据更新之后立即使用这个方法,获得更新后的dom
        this.isRouterAlive = true;
      });
    },
  },

在这里插入图片描述
紧接着在methods下写一个方法,provide。解释:因为要在其它子组件中用到这个方法,所以在APP.vue中定义好。

  provide() {
    return { reload: this.reload };
  },

在这里插入图片描述
最后,找到我需要刷新的页面,我上面是以新增为例,找到这个新增组件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
第二种刷新,就是局部刷新,因为整体刷新对服务器不友好,领导不让我用这个方法,但不代表各位小可爱的领导不让用,我觉得挺好的,于是想的另一种比较符合领导意愿的刷新方法,因为我们是组件开发,新增是个单独的组件,列表也是个单独的组件,局部刷新需要用到列表组件,我所有列表组件先叫index.vue
首先在index.vue里面引入新增组件
在这里插入图片描述

  <el-dialog
      v-el-drag-dialog
      :close-on-click-modal="false"
      title="添加"
      class="popUpBox"
      :visible.sync="addVisible"
      width="500px"
    >
      <AddComponent @close="closeSubWin" @refresh="getList" />
    </el-dialog>

在这里插入图片描述
再回到新增组件的保存,
在这里插入图片描述

在这里插入图片描述
大功告成,局部刷新和页面整体刷新大概就是这样写出来的,有不足的地方,希望各位留言补充,我也会多来码园逛逛,大家一起探讨,学无止境,加油。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Vue 2.0 项目,可以通过自定义全局弹框来实现对话框、提示框等弹框的统一管理。实现方式如下: 1. 创建一个 Vue 组件作为全局弹框的模板,包含弹框的 HTML 结构和样式,以及控制弹框显示隐藏的逻辑。 2. 在 main.js 创建一个 Vue 实例,作为全局事件总线,用于在组件间通信。 3. 在该 Vue 实例注册一个自定义指令,用于在组件调用弹框。 4. 在组件使用自定义指令,触发全局事件,传递弹框的参数给全局事件总线。 5. 在全局事件总线的相应方法,根据传递的参数控制弹框的显示隐藏。 示例代码如下: 1. 弹框组件模板 ``` <template> <div v-show="visible" class="dialog"> <slot></slot> </div> </template> <script> export default { data() { return { visible: false }; }, methods: { show() { this.visible = true; }, hide() { this.visible = false; } } }; </script> <style> .dialog { position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); background-color: #fff; padding: 20px; border-radius: 5px; box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.5); z-index: 9999; } </style> ``` 2. 全局事件总线 ``` import Vue from 'vue'; export const eventBus = new Vue(); ``` 3. 自定义指令 ``` import { eventBus } from './eventBus'; Vue.directive('dialog', { bind(el, binding) { el.addEventListener('click', () => { eventBus.$emit('showDialog', binding.value); }); } }); ``` 4. 组件调用弹框 ``` <template> <button v-dialog="{ title: 'Hello', content: 'World' }">Show Dialog</button> </template> ``` 5. 全局事件总线控制弹框的显示隐藏 ``` import Dialog from './Dialog.vue'; import { eventBus } from './eventBus'; new Vue({ render: h => h(App), created() { eventBus.$on('showDialog', ({ title, content }) => { const dialog = new Vue({ render: h => h(Dialog, { props: { title, content } }) }).$mount(); document.body.appendChild(dialog.$el); dialog.$children[0].show(); }); } }).$mount('#app'); ``` 这样就实现了一个简单的全局弹框组件,可以在项目任意组件间使用。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值