首页 > 其他分享 >vue实现自定义v-loading指令

vue实现自定义v-loading指令

时间:2023-02-02 21:02:06浏览次数:41  
标签:el loading 自定义 binding Vue instance vue

实现dom节点的局部loading效果,效果如element-ui的v-loading。

实现代码:

loading.js,其中@/components/loadingComponent/index.vue为自定义的一个loading组件,可自行实现。

import Vue from 'vue'
import loading from '@/components/loadingComponent/index.vue'

const LoadingComponents = Vue.extend(loading)

const insertDom = (parent, el) => {
  parent.appendChild(el.mask)
}

const toggleLoading = (el, binding) => {
  if (binding.value) {
    Vue.nextTick(() => {
      el.instance.visible = true
      insertDom(el, el, binding)
    })
  } else {
    el.instance.visible = false
  }
}

export default {
  bind(el, binding, vnode) {
    const mask = new LoadingComponents({
      el: document.createElement('div'),
      data() {}
    })
    el.style.position = 'relative'
    el.instance = mask
    el.mask = mask.$el
    el.maskStyle = {}
    binding.value && toggleLoading(el, binding)
  },
  update(el, binding) {
    if (binding.oldValue !== binding.value) {
      toggleLoading(el, binding)
    }
  },
  unbind(el, binding) {
    el.instance && el.instance.$destroy()
  }
}

全局注册,如果要覆盖掉element-ui的v-loading需要在引入element-ui后面,即Vue.use(ElementUI)后再注册自定义的loading指令

import loading from './loading'

Vue.directive('loading', loading)

使用loading指令

  <div id="app" v-loading="loading">
  </div>

标签:el,loading,自定义,binding,Vue,instance,vue
From: https://www.cnblogs.com/linmt/p/17087398.html

相关文章

  • vue脚手架的使用
    打开创建好的vue项目,点开src可以看到下面:assets是用来放图片的目录components用于放vue组件文件router用于放路由文件main.js是项目开始走的路口,一般不用修改:import......
  • vue脚手架的安装
    安装脚手架基于npm命令下面,因此需要先安装node.js前面,前面安装elementui里面有介绍怎么安装node.jselement-ui的安装及使用-Liku007-博客园(cnblogs.com)npm管理前端......
  • VUE API接口的统一管理
    vue项目对api进行封装统一管理在日常vue项目中或刚接收一个vue项目,如果项目足够大,就需要进行统一管理和规范接口了1.js文件创建先在src目录下新建一个api文件夹,然后......
  • 解决接口正常返回但el-table一直loading的问题
    问题描述:页面初始化的时候,el-table数据能正常展示 这时候任意选择一个查询条件,列表则一直处于loading状态。经排查,接口数据正常返回,但控制台多了个错误信息。 ......
  • mybatis在代码中自定义sql
           ......
  • Could not find a declaration file for module ‘xxx‘ (vue3+ts)
    vue3+ts框架搭建过程中遇到引入三方qs库出现eslitn提示'Couldnotfindadeclarationfileformodule‘qs‘';解决方案方案1:npmi--save-dev@types/qs此处......
  • Swift Codable 自定义默认值解码
     前言最近我们公司服务端修改了某个接口返回数据结构,减少了一些字段,导致iOS这边codeable解码失败,获取不到正确的数据信息,相关业务无法完成。不想使用可选值类型,可以使用......
  • Android Studi导出apk包自定义文件名
    在app的gradle配置文件中的release代码块中放置以下代码android.applicationVariants.all{variant->variant.outputs.all{output->if(outputFileNa......
  • KingbaseES V8R6备份恢复案例之---自定义表空间指定恢复目录数据恢复
    案例说明:KingbaseESV8R6在通过sys_rman执行物理备份恢复时,可以通过参数‘--kb1-path’,指定恢复的数据(data)目录,但如果原备份中包含自定义表空间时,需要建立表空间映射,再执......
  • bug|git 提交代码报错|vue-cli-service lint found some errors. Please fix them and
    前言git提交代码报错,使用除了参考链接里的解决方案,正好复习一下之前学习的GitHooks:错误git日志git-error-1675323308267...✖vue-cli-servicelintfounds......