element上传组件循环引用及简单时间倒计时的实现

一、element上传组件循环引用

在使用vue框架,结合element-ui库时,我们可能会遇到element上传组件循环引用的问题。这个问题主要是由于在组件导入过程中,自己调用了自己,导致了循环依赖的情况。解决这个问题可以采用以下两种方式:

  1. 使用动态导入

动态导入可以在运行时才导入依赖库,而不是在编译时就解决依赖。这样可以避免循环依赖的问题。

例如:

<template>
  <el-upload
    :action="uploadUrl"
    :on-success="handleUploadSuccess"
    :before-upload="beforeAvatarUpload"
    :file-list="fileList"
    list-type="picture-card">
    <div class="upload-text">点击上传</div>
  </el-upload>
</template>

<script>
export default {
  data() {
    return {
      fileList: [],
      uploadUrl: '',
    };
  },
  methods: {
    beforeAvatarUpload(file) {
      const isJPG = file.type === 'image/jpeg';
      const isPNG = file.type === 'image/png';
      const isLt2M = file.size / 1024 / 1024 < 2;

      if (!isJPG && !isPNG) {
        this.$message.error('上传头像图片只能是 JPG 或者 PNG 格式!');
      }
      if (!isLt2M) {
        this.$message.error('上传头像图片大小不能超过 2MB!');
      }
      return (isJPG || isPNG) && isLt2M;
    },
    handleUploadSuccess(response, file, fileList) {
      console.log(response, file, fileList);
    },
  },
};
</script>
  1. 使用mixin

Mixin是一种分发 Vue 组件中可复用功能的非常灵活的方式。使用Mixin可以将需要共享的代码放在mixin中,然后在需要使用的组件中引入即可。

例如:

// uploadMixin.js
export default {
  data() {
    return {
      fileList: [],
      uploadUrl: '',
    };
  },
  methods: {
    beforeAvatarUpload(file) {
      const isJPG = file.type === 'image/jpeg';
      const isPNG = file.type === 'image/png';
      const isLt2M = file.size / 1024 / 1024 < 2;

      if (!isJPG && !isPNG) {
        this.$message.error('上传头像图片只能是 JPG 或者 PNG 格式!');
      }
      if (!isLt2M) {
        this.$message.error('上传头像图片大小不能超过 2MB!');
      }
      return (isJPG || isPNG) && isLt2M;
    },
    handleUploadSuccess(response, file, fileList) {
      console.log(response, file, fileList);
    },
  },
};

// component.vue
<template>
  <el-upload
    :action="uploadUrl"
    :on-success="handleUploadSuccess"
    :before-upload="beforeAvatarUpload"
    :file-list="fileList"
    list-type="picture-card">
    <div class="upload-text">点击上传</div>
  </el-upload>
</template>

<script>
import UploadMixin from './uploadMixin';

export default {
  mixins: [UploadMixin],
};
</script>

二、简单时间倒计时的实现

在web开发中,我们经常会遇到一些需要倒计时的场景,比如秒杀,拼团等活动。下面提供一种简单的倒计时实现方法:

<template>
  <div>{{ formatTime }}</div>
</template>

<script>
export default {
  data() {
    return {
      endTime: 1631278800000, // 时间戳
      intervalId: null, // setInterval的ID
    };
  },
  computed: {
    currentTime() {
      return new Date().getTime();
    },
    remainingTime() {
      return this.endTime - this.currentTime;
    },
    formatTime() {
      const remainingSeconds = parseInt(this.remainingTime / 1000);
      const hours = Math.floor(remainingSeconds / 3600);
      const minutes = Math.floor((remainingSeconds % 3600) / 60);
      const seconds = Math.floor(remainingSeconds % 60);
      return `${hours}小时${minutes}分钟${seconds}秒`;
    },
  },
  mounted() {
    this.intervalId = setInterval(() => {
      if (this.remainingTime <= 0) {
        clearInterval(this.intervalId);
      }
    }, 1000);
  },
  beforeDestroy() {
    clearInterval(this.intervalId);
  },
};
</script>

在这个示例中,我们定义了一个endTime属性,表示倒计时结束时间的时间戳,同时也定义了一个remainingTime属性,用来计算当前剩余时间。在computed中定义了一个formatTime属性,用来将倒计时的时间格式化为字符串输出。在mounted中使用setInterval每秒钟执行一次剩余时间的计算,并判断是否已经到达倒计时的结束时间。在beforeDestroy中清除setInterval。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:element上传组件循环引用及简单时间倒计时的实现 - Python技术站

(0)
上一篇 2023年5月29日
下一篇 2023年5月29日

相关文章

  • vue计算属性和监听器实例解析

    Vue计算属性和监听器实例解析 在Vue中,计算属性和监听器是常用的属性,它们起到了非常关键的作用。通过它们,我们可以对数据进行处理和监听,从而提高应用的开发效率和性能。在本文中,我将分享关于Vue计算属性和监听器的解析,包括定义、使用方法和示例说明。 什么是计算属性 计算属性是Vue中常用的一个属性,用于对数据进行更加复杂的处理。其本质上是一个函数,可以根…

    Vue 2023年5月28日
    00
  • java实现微信扫码登录第三方网站功能(原理和代码)

    以下是详细讲解“Java实现微信扫码登录第三方网站功能(原理和代码)”的完整攻略: 前言 在第三方网站中,我们需要提供各种登录方式给用户,微信扫码登录是其中一种,我们可以使用Java来实现。 原理 微信扫码登录功能的原理是,第三方网站提供一个扫码地址,用户使用微信扫描该地址生成二维码,用户使用微信扫码登录后,微信服务器会将用户的openId和accessTo…

    Vue 2023年5月28日
    00
  • vue router-link传参以及参数的使用实例

    下面我将为您详细讲解“Vue Router-Link 传参以及参数的使用”。 什么是 Vue Router-Link? Vue Router-Link 是 Vue.js 的一个路由组件,可以让你在 SPA(Single Page Application 单页应用程序)中实现页面跳转和参数传递。 如何使用 Vue Router-Link 传参? 使用 Vue …

    Vue 2023年5月29日
    00
  • 一篇文章总结Vue3.2语法糖使用

    一篇文章总结Vue3.2语法糖使用 简介 Vue.js是一款流行的前端JavaScript框架,而Vue 3是其最新版本,其中引入了一些方便开发的新特性,即语法糖。本篇文章将讲解Vue3.2语法糖的使用方法。 defineComponent函数 在Vue3中,我们可以使用defineComponent函数定义组件,它可以让代码更加简洁明了。下面是一个使用de…

    Vue 2023年5月27日
    00
  • vue中使用Echarts map图实现下钻至县级的思路详解

    实现 Echarts 中的地图下钻操作,需要遵循以下三个步骤: 绘制初始地图,该地图只包含省级别数据,添加 click 事件监听。 在 click 事件处理函数中,获取当前点击区域的信息以及该区域对应的下一级地图数据。 根据下一级地图数据,重新绘制地图,并添加 click 事件监听。 下面我们通过两个示例以及详细的代码讲解来具体说明这三个步骤。 示例一:绘制…

    Vue 2023年5月28日
    00
  • Vue计算属性与监视属性实现方法详解

    首先我会为你介绍Vue的计算属性和监视属性的概念及其实现方式。然后我会为你提供两个示例,以便更好地理解它们的应用场景。 Vue计算属性与监视属性实现方法详解 Vue计算属性 什么是计算属性 在Vue中,计算属性是一种用户可以定义的数据属性,用于对原始数据进行计算,并返回一个结果。计算属性会缓存其返回结果,并在属性所依赖的数据发生变化时更新,这样可以避免重复计…

    Vue 2023年5月27日
    00
  • 基于vue实现swipe分页组件实例

    下面是我对于如何基于Vue实现swipe分页组件的完整攻略。 一、介绍 Swipe分页组件是一种常见的基于手势切换页面的交互方式,Vue框架也提供了实现该组件的多种方法。本攻略将详细介绍如何利用Vue实现这一组件,并提供两个示例说明。 二、环境准备 在开始编写代码之前,我们需要确保本地环境中已经配置好了Vue及相关依赖包。作为一个开发者,你应该已经安装了No…

    Vue 2023年5月29日
    00
  • webpack中如何加载静态文件的方法步骤

    当我们使用webpack进行前端工程化打包构建时,经常会涉及到加载静态文件的问题,包括但不限于图片、字体、音视频等多种类型的文件。接下来,我将为大家介绍 webpack 中如何加载静态文件的方法步骤。 1. 安装相关loader webpack 对于不同类型的静态文件,需要用对应的 loader 来进行加载。 以图片文件为例,可以安装 file-loader…

    Vue 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部