uniapp全局调用自定义loading框或toast消息;

本文介绍了如何在uniapp中通过vuex实现全局的自定义loading和toast组件。通过监听vuex状态管理中的loadingState,结合uni.$emit和uni.$on进行事件监听,实现在任何页面或.js文件中都能方便地控制loading和toast的显示与隐藏,简化了代码并提高了代码复用性。
摘要由CSDN通过智能技术生成

uniapp全局调用自定义loading框或toast消息;

全局调用主要依靠vuex状态管理,实现思路大致是:在自定义loading组件中监听vuex(vuex-uniapp官方文档)中的loadingState当前的显示或隐藏状态,在自定义loading组件中监听到vuex中的状态发生改变时,调用loading组件中控制显示隐藏的方法即可。此时在页面中即可直接修改vuex中的状态从而致使页面显示隐藏自定义loading或toast;美中不足就是需要用到loading的组件中要注册一下组件;

自定义loading组件

<script>
//映射vuex中控制loading显示隐藏的状态到此组件
import { mapState } from "vuex";
export default {
  data() {
    return {
      show: false,
    };
  },
  computed: {
    ...mapState(["loadingState"]),
  },
  watch: {
    // 监听vuex中的loadingState变化
    loadingState(newVal, oldVal) {
      if (newVal) {
        this.open();
      } else {
        this.close();
      }
      // console.log(newVal, oldVal, "监听到loadingState变化");
    },
  },
  methods: {
    open() {
      this.show = true;
    },
    close() {
      this.show = false;
    },
  },
};
</script>

vuex

const store = new Vuex.Store({
    state: {
        loadingState: false,//loading 显示隐藏
    },
    mutations: {
        showLoading(state) {
            state.loadingState = true;
        },
        hideLoading(state) {
            state.loadingState = false;
        }
    }
})
// 到上面这一步其实已经可以使用了,但是为了方便,使用了uni.$emit和uni.$on来全局监听

App.vue

//在onLaunch时,监听全局自定义事件,这样在页面组件或者.js文件中可以直接uni.$emit自定义事件来控制显示隐藏,这样就不需要在用到loading的页面中映射vuex的数据了
<script>
import store from "@/store/index.js";
export default {
  onLaunch: function () {
    // 监听自定义loading的显示与隐藏方法
    uni.$on("showLoading", ()=>{store.commit("showLoading")});
    uni.$on("hideLoading", ()=>{store.commit("hideLoading")});
  },
};
</script>

调用

uni.$emit('showLoading');
uni.$emit('hideLoading');

Tips:虽然直接在父组件中引入loading子组件然后调用loading中的方法也可以实现,但是抛去每次要给组件绑定ref再通过ref控制组件不说,如果直接引入子组件不通过vuex控制,那么在项目的某个.js文件中,是无法控制自定义loading或toast的显示隐藏,上面所描述的方法解决了此问题,在.js文件中也可调用。示例代码中直接控制了显示隐藏,实际使用中通过vuex控制时携带参数,可以实现更丰富的自定义loading或toast。

永远相信美好的事情即将发生。

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值