zoukankan      html  css  js  c++  java
  • vue自定义全局组件

    以自定义下载loading为例

    1.首先创建自定义组件文件

     

    2.编辑下载loading自定义组件中的内容

    <template>
      <div>
        <el-dialog
          fullscreen
          modal-append-to-body
          custom-class="data-download"
          :visible="downloadLoading"
          :show-close="false"
        >
          <h3>文件正在生成中,已用时 {{ takedTime }} s...</h3>
          <div class="data-download-progress">
            <el-progress
              text-inside
              :stroke-width="28"
              :percentage="downloadOver ? 100 : percentage"
            ></el-progress>
            <el-button @click="cancelDownload" size="mini" type="warning" round>
              取消下载
            </el-button>
          </div>
        </el-dialog>
      </div>
    </template>
    
    <script>
    export default {
      name: 'downloadDialog',
      props: {
        downloadLoading: {
          default: false
        },
        downloadOver: {
          default: false
        }
      },
      data() {
        return {
          // 下载 - 已耗时
          takedTime: 0,
          // 下载 - 百分比
          percentage: 0,
          // 下载 - 计时器
          downloadTimer: ''
        };
      },
      created() {},
      watch: {
        downloadLoading() {
          if (this.downloadLoading) {
            this.takedTime = 0;
            this.percentage = 0;
            this.downloadTimer = setInterval(() => {
              this.takedTime++;
              if (this.percentage < 99) this.percentage += 2;
              if (this.percentage > 99) this.percentage = 99;
            }, 1000);
          } else {
            clearInterval(this.downloadTimer);
          }
        }
      },
      methods: {
        cancelDownload() {
          this.$confirm(`文件正在生成中, 是否取消下载?`, '取消下载', {
            confirmButtonText: '取消下载',
            cancelButtonText: '继续下载',
            type: 'warning'
          }).then(() => {
            clearInterval(this.downloadTimer);
            this.$emit('cancelDownload');
          });
        }
      }
    };
    </script>
    
    <style lang="scss">
    .data-download {
      background-color: rgba(255, 255, 255, 0.8) !important;
      display: flex;
      align-items: center;
      justify-content: center;
      .el-dialog__header {
        display: none;
      }
      .el-dialog__body {
        height: 100%;
        max- 100vw;
        box-sizing: border-box;
        display: flex;
        flex-direction: column;
        justify-content: center;
        align-items: center;
        h3 {
          text-align: center;
          margin-bottom: 20px;
        }
      }
      &-progress {
         500px;
        display: flex;
        .el-progress {
          flex: 1;
        }
        .el-button {
          margin-left: 10px;
        }
      }
    }
    </style>

    3.编辑 downloadDialog 中index.js中的内容

    // 引入组件
    import DownloadDialogLoading from './index.vue';
    
    // 自定义组件对象
    const DownloadDialog = {
      // install 是默认的方法。当外界在 use 这个组件的时候,就会调用本身的 install 方法,同时传一个 Vue 这个类的参数
      install: function(Vue) {
        // Vue.component() 与正常的全局注册组件用法相同,可以理解为通过 install 和 Vue.use()函数注册了全局组件
        Vue.component('DownloadDialog', DownloadDialogLoading);
      }
    }
    // 导出
    export default DownloadDialog;

    4.在main.js中导入使用

    // 全局引入自定义下载 loading
    import DownloadDialog from '@/components/DownloadDialog/index.js';
    Vue.use(DownloadDialog);

    5.在组件中直接使用

      这里使用不需要导入,注册

      1.导入:import DownloadDialog from '@/components/DownloadDialog/index.vue'

      2.注册:components: {

            DownloadDialog

          }

    <template>
      <div class="home">
        <!-- 下载进度提示 -->
        <DownloadDialog
          @cancelDownload="cancelDownload"
          :downloadOver="downloadOver"
          :downloadLoading="downloadLoading"
        ></DownloadDialog>
      </div>
    </template>
  • 相关阅读:
    apache2.4+php7.3.2+mysql5.7
    redis 中的key值过期后,触发通知事件
    zookeeper之分布式锁以及分布式计数器(通过curator框架实现)
    SpringCloud学习笔记(4)——Zuul
    SpringCloud学习笔记(3)——Hystrix
    SpringCloud学习笔记(2)——Ribbon
    c++各种排序的简单实现
    c++动态规划dp算法题
    华为机试练习
    ubuntu遇到的 the system is runing low-graphics mode 问题
  • 原文地址:https://www.cnblogs.com/zhangning187/p/zdyqjzj.html
Copyright © 2011-2022 走看看