zoukankan      html  css  js  c++  java
  • vue 增加loading指令

    在开发项目的时候发现为了提高交互上的体验,需要加一个loading效果,为了请求接口数据响应过慢。在没有引用其他ui框架的情况下自己写一个指令。

    首先创建文件夹如下:

    images文件夹里面就一个随便适合的gif图片,这个可以找ui帮忙解决,或者自己去找找素材。

    loading.vue里面的内容

    <template>
      <div v-show="visible" class="loading-wrap">
        <div class="loading-box">
          <img src="./images/loading.gif" alt="">
        </div>
      </div>
    </template>
    
    <script>
      export default {
        name: "loading",
        data() {
          return {
            visible: false
          }
        }
      }
    </script>
    <style scoped lang="scss">
      .loading-box {
        position: absolute;
        left: 50%;
        top: 40%;
        height: 60px;
         60px;
        margin-left: -30px;
        z-index: 2000;
        img {
           100%;
          height: 100%;
        }
      }
    </style>
    

      

    很简单,就一个ui样式,加一个显示隐藏

    下面是index.js

    import Vue from 'vue'
    import Loading from './loading.vue'
    
    const Mask = Vue.extend(Loading)
    
    const toggleLoading = (el, binding) => {
      if (binding.value) {
        Vue.nextTick(() => {
          // 控制loading组件显示
          el.instance.visible = true
          // 插入到目标元素
          insertDom(el, el, binding)
        })
      } else {
        el.instance.visible = false
      }
    }
    
    const insertDom = (parent, el) => {
      parent.appendChild(el.mask)
    }
    
    export default {
      bind: function (el, binding, vnode) {
        const mask = new Mask({
          el: document.createElement('div'),
          data () {}
        })
        el.instance = mask
        el.mask = mask.$el
        el.maskStyle = {}
        binding.value && toggleLoading(el, binding)
      },
      update: function (el, binding) {
        if (binding.oldValue !== binding.value) {
          toggleLoading(el, binding)
        }
      },
      unbind: function (el, binding) {
        el.instance && el.instance.$destroy()
      }
    }

    接下去在想用的地方加一个 v-loading="isLoading" 指令就行, isLoading 是各自页面控制显示隐藏的参数

    哦,别忘了在main.js注册一个指令全局

    // 注册自定义指令
    Object.keys(directives).forEach(key => {
      Vue.directive(key, directives[key])
    })

    其实这个指令的方法是参考饿了么里面的loading方法写出来的,还希望有优化的地方请指教。

  • 相关阅读:
    北京积分落户
    HDU-1054-Strategic Game
    POJ-3020-Antena Placement(最小路径覆盖)
    HDU-4185-Oil Skimming(最大匹配)
    HDU-2389-Rain on your Parade (最大匹配,kopcroft-karp)
    HDU-1083-Courses(最大匹配)
    HDU-1045-Fire Net(最大匹配)
    HDU-2444-The Accomodation of Students(二分图判定,最大匹配)
    Codeforces Round #569 (Div. 2) C. Valeriy and Deque
    Codeforces Round #569 (Div. 2) B. Nick and Array
  • 原文地址:https://www.cnblogs.com/yuanyanbk/p/13898460.html
Copyright © 2011-2022 走看看