uniapp小程序自定义loding,通过状态管理配置全局使用

一、在项目中创建loding组件

在uniapp的components文件夹下创建loding组件,如图:

示例代码:

c 复制代码
<template>
	<view class="loginLoading">
		<image src="../../static/loading.gif"  class="loading-img" mode=""></image>
	</view>
</template>

<script>
	export default {
		name:"loading",
		data() {
			return {
				
			};
		}
	}
</script>

<style lang="scss" scoped>
	 .loginLoading{
	   width:100%;
	   height:100%;
	   display: flex;
	   left: 0;
	   top: 0;
	   right: 0;
	   bottom: 0;
	   flex-direction: column;
	   position: fixed;
	   justify-content: center;
	   align-items: center;
	   z-index: 999999;
	   .loading-img{
		   width:300rpx;
		   height:110rpx;
	   }
	 }
</style>

二、在main.js中全局挂载store

c 复制代码
import App from './App'
import store from './store'

import { createSSRApp } from 'vue'
import { createI18n } from 'vue-i18n'

const i18n = createI18n(i18nConfig)
export function createApp() {
  const app = createSSRApp(App)
  
  //配置全局属性
  app.config.globalProperties.$store=store;
  // 全局国际化配置
  app.use(i18n)
  return {
    app,
	store,
	created: bootstrap
  }
}

三、配置loding状态管理(状态管理可以按自己的需求配置)

状态管理存储: 在store文件夹下创建modules文件,里面创建loding.js

c 复制代码
const app = {
	state: {
		loding: false,
	},

	mutations: {
		SET_LODING: (state, value) => {
			state.loding = value
		}

	},

	actions: {

	}
}

export default app

模块统一暴露: 在store文件夹下创建modules文件,里面创建index.js

c 复制代码
import loding from './loding'

export default {
  login,
}

获取状态管理: 在store下创建getters.js

c 复制代码
const getters = {
	loding: state => state.my.loding, //loding
}


export default getters

创建状态管理: 在store下创建index.js

c 复制代码
import {createStore} from 'vuex'

import modules from './modules'
import getters from './getters'

export default new createStore({
  modules,
  state: {

  },
  mutations: {

  },
  actions: {

  },
  getters
})

获取状态管理属性值: 在store下创建getters.js

c 复制代码
const getters = {
	loding: state => state.my.loding, //loding
}


export default getters

四、在接口封装中,接口请求开始和接口请求成功,分别设置状态管理loding值为true和false

c 复制代码
// 请求结束
$http.requestEnd = options => {
  // 判断当前接口是否需要加载动画
  if (options.load) {
    requestNum = requestNum - 1
    if (requestNum <= 0) {
      store.commit('SET_LODING', false);
    }
  }
}
c 复制代码
// 请求开始拦截器
$http.requestStart = options => {
  if (options.load) {
    if (requestNum <= 0) {
      // 打开加载动画
     store.commit('SET_LODING', true);
    }
    requestNum += 1
  }
}

五、在页面中引用(因为uniapp无法像H5项目,可以在html中全局引用,所以需要在需要使用loding的页面引用即可),不用在接口中再配置显示隐藏

c 复制代码
<template>
<!-- 引用loding -->
	<xc-loading v-if="this.$store.getters.loding"></xc-loading>
</template>
相关推荐
majingming1235 小时前
FUNCTION
java·前端·javascript
A_nanda6 小时前
Vue项目升级
前端·vue3·vue2
SuperEugene6 小时前
Axios 接口请求规范实战:请求参数 / 响应处理 / 异常兜底,避坑中后台 API 调用混乱|API 与异步请求规范篇
开发语言·前端·javascript·vue.js·前端框架·axios
abigale037 小时前
【浏览器 API / 网络请求 / 文件处理】前端文件上传全流程:从基础上传到断点续传
前端·typescript·文件上传·vue cli
子兮曰7 小时前
Bun v1.3.11 官方更新全整理:新增功能、关键修复与升级验证
javascript·node.js·bun
Setsuna_F_Seiei7 小时前
AI 对话应用之页面滚动交互的实现
前端·javascript·ai编程
新缸中之脑7 小时前
追踪来自Agent的Web 流量
前端
wefly20178 小时前
从使用到原理,深度解析m3u8live.cn—— 基于 HLS.js 的 M3U8 在线播放器实现
java·开发语言·前端·javascript·ecmascript·php·m3u8
英俊潇洒美少年8 小时前
vue如何实现react useDeferredvalue和useTransition的效果
前端·vue.js·react.js
kyriewen119 小时前
给浏览器画个圈:CSS contain 如何让页面从“卡成PPT”变“丝滑如德芙”
开发语言·前端·javascript·css·chrome·typescript·ecmascript