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简单练习 桌面时钟的实现代码实例”的完整攻略。 一、实现时钟的HTML结构 首先,我们需要在HTML中添加一个 元素,用来展示时钟: <div id="app"> <h1>Vue 时钟</h1> <div class="clock"> <span …

    Vue 2023年5月29日
    00
  • 使用Bootstrap + Vue.js实现表格的动态展示、新增和删除功能

    使用Bootstrap + Vue.js来实现动态表格展示、新增和删除功能需要进行以下步骤: 步骤一:引入所需库 在项目中引入Bootstrap和Vue.js两个库,可以使用CDN或在本地引入。 <!– 引入Bootstrap CSS文件 –> <link rel="stylesheet" href="ht…

    Vue 2023年5月27日
    00
  • 详解vue数据响应式原理之数组

    详解Vue数据响应式原理之数组 什么是Vue数据响应式? Vue.js是一款MVVM框架,它通过数据绑定和组件化来构建用户界面。Vue的核心是将DOM和数据进行绑定,当数据发生变化时,DOM会自动更新,这就是Vue的数据响应式。 数组响应式的特殊性 数组在JS中是引用类型,当我们对一个数组进行变更时,比如push、pop、splice等操作,Vue是无法检测…

    Vue 2023年5月28日
    00
  • Vue中ref的用法及演示

    下面是“Vue中ref的用法及演示”的完整攻略。 一、什么是Vue中的ref ref 是 Vue 提供的一个属性,可以用来给元素或组件注册引用信息。比如,渲染后,我们可以使用$refs来访问这个元素。 二、Vue中ref的用法 1. 绑定ref 我们对组件(或元素)绑定ref属性,Vue将会提供一个组件实例(或元素)的引用,我们在组件内可以使用 this.$…

    Vue 2023年5月28日
    00
  • Vue Render函数原理及代码实例解析

    Vue Render函数原理及代码实例解析 Render函数是Vue中非常重要的一个概念。对于Render函数的深入理解能够帮助我们更好地理解Vue的内部实现机制。本文将从以下几个方面介绍Vue Render函数的原理和代码实例。 什么是Render函数 Render函数是Vue模板编译之后生成的一个函数,负责将Vue实例渲染成一个虚拟DOM树,最终将虚拟D…

    Vue 2023年5月28日
    00
  • Vue3插槽(slot)使用方法详解

    Vue3中插槽(slot)是指在组件内部定义好一些模板代码,并在组件使用时通过插槽嵌入到组件内部的技术。本文将详细讲解Vue3插槽的使用方法。 插槽的基本概念 插槽是Vue3中一个重要的特性,它允许组件与它的子组件在编译期间动态传递内容。在Vue2中,插槽分为具名插槽和匿名插槽两种,但在Vue3中只有一种插槽。一个基本的插槽包括两个部分:插槽定义和插槽内容。…

    Vue 2023年5月28日
    00
  • 解决Springboot 2 的@RequestParam接收数组异常问题

    下面就是解决Springboot 2中的@RequestParam接收数组异常问题的完整攻略: 问题描述 在使用Springboot 2的@Controller或@RestController接口接收请求参数时,如果使用@RequestParam注解接收数组参数时,有时候会出现异常,例如: Failed to convert value of type ja…

    Vue 2023年5月29日
    00
  • vue-jsonp的使用及说明

    一、vue-jsonp的说明 vue-jsonp是一个Vue.js插件,它允许我们使用JSONP方法向API服务器请求数据。JSONP是一种跨域访问数据的方法,它通过动态添加标签来实现异步加载,一般使用起来比较简单。在Vue.js中,我们可以借助vue-jsonp这个插件,使用方式也是非常简单的。 二、安装vue-jsonp 如果想使用vue-jsonp,首…

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