v-loading指令

Posted 魔法少女郭德纲

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了v-loading指令相关的知识,希望对你有一定的参考价值。

v-loading指令

v-loading 的主要思路

这里讲的是 区域加载
  • 导入loading组件, 获得loading组件的dom, 插入到绑定v-loading指令的parentNode中。
  • 获取parentNode的宽高定位等样式, 赋值给loading组件样式, 来保证loading组件在区域内全覆盖。
  • 这里要注意的是: loading组件一定是要脱离文档流的,所以一定是有position: absolute,所以,如果parentNode没有定位属性,要给parentNode加上position: relative

代码实现

/* main.js */
//...
import Loading from "./components/Loading/index.js"
Vue.use(Laoding)
//...
/* components/Loading/loading.vue */
<template>
    <div style="position: absolute" v-show="visible">组件正在加载,请耐性等待<div>
</template>
<script>
    export default {
        data(){
            return {
                visible: true
            }
        }
    }
</script>
/* components/Loading/index.js */
// 为了方便阅读,代码没有再做封装和优化
import loading from "./loading.vue"
export default  {
    install(Vue){
        const Constructor = Vue.extend(loading)
        const loadingComponent = new Constructor()
        const loadingComponentDom = loadingComponent.$mount().$el
        Vue.directive("loading", {
            bind(el,binding){
                //需要等到dom更新后,才能拿到parentNode即el的样式
                Vue.nextTick(()=>{
                    const style = window.getComputedStyle(el,null)
                    loadingComponentDom.style.width = style.width
                    loadingComponentDom.style.height = style.height
                    if(style.position === "static") {
                        el.style.position = "relative"
                    }
                    el.appendChild(loadingComponentDom)
                    loadingComponent.visible = Boolean(binding.value)
                    el.instance = loadingComponent
                })
            },
            update(el,binding){
                el.instance.visible = Boolean(binding.value)
            }
        })
    }
}

以上是关于v-loading指令的主要内容,如果未能解决你的问题,请参考以下文章

vue2自定义指令-加载指令v-loading和占位图指令v-showimg

解析elementui 中的v-loading指令

这些角度电子邮件指令代码片段如何连接

vue 3 指令监听 vue 发射

elmentUI中 v-loading.fullscreen实现方式

同一个节点如何维护多个elementUI loading组件