vue中自己封装loading组件

loading.vue

  <template>
      <div v-if="show">
        <div class="mask_loading"><img src="@/assets/phone/loading.gif" alt="" class="loading"></div>
    </div>
</template>

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

    },
    props: {
        show: Boolean
    },
}
</script>
<style scoped lang="scss">
.loading{
    width: 100px;
    height: 80px;
    position: absolute;
    left: 50%;
    top: 50%;
    margin-left: -50px;
    margin-top: -40px;
    z-index: 13;
}
.mask_loading{
  width: 100%;
  height: 100%;
  background:rgba(255,255,255,0);
  position: fixed;
  top: 0;
  z-index: 99999;
}
</style>

loading.js

import Vue from 'vue'
import loadingComponent from '@/app-client/component/loading.vue'

const LoadingConstructor = Vue.extend(loadingComponent)

const instance = new LoadingConstructor({
    el: document.createElement('div')
})

instance.show = false // 默认隐藏
const loading = {
 show() { // 显示方法
    instance.show = true
    document.body.appendChild(instance.$el)
  },
  hide() { // 隐藏方法
      instance.show = false
  }
}

export default {
    install() {
    if (!Vue.$loading) {
        Vue.$loading = loading
    }
    Vue.mixin({
        created() {
            this.$loading = Vue.$loading
        }
    })
}
}

使用

main.js中引入loading组件,然后就可以在任意一个组件中调用loading方法
import loading from '@/app-client/component/loading.js' // 引入loading
在组件中使用
this.$loading.show()
this.$loading.hide()
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。