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

yizhihongxing

一、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日

相关文章

  • 解决Echarts 显示隐藏后宽度高度变小的问题

    针对Echarts显示隐藏后宽度高度变小的问题,解决方法如下: 问题分析 Echarts在隐藏和显示时,并没有对宽度和高度进行重新计算,导致当图表重新显示时,图表大小会变小,显示不完整的问题。 解决方法 可以手动计算图表容器的宽度和高度,并调用Echarts的resize方法实现图表大小的更新。 步骤 具体步骤如下: 获取图表容器的宽度和高度 var cha…

    Vue 2023年5月28日
    00
  • Vue登录功能实现全套详解(含封装axios)

    关于“Vue登录功能实现全套详解(含封装axios)”的完整攻略,我将为你进行详细讲解。 1. 概述 本文将从以下方面讲解Vue登录功能的实现: Vue项目的创建和初始化; Vue路由的配置; Vue组件的编写; 使用axios封装HTTP请求; 进行登录验证。 2. Vue项目的创建和初始化 首先,我们需要使用Vue-CLI创建一个Vue项目,并且初始化项…

    Vue 2023年5月28日
    00
  • Vue.js实现无限加载与分页功能开发

    关于“Vue.js实现无限加载与分页功能开发”的完整攻略,可以分为以下几个步骤: 步骤一:准备工作 在开始开发之前,我们需要准备一些前置工作,其中包括: 安装好Vue.js框架。如果你还没有安装,可以通过以下命令来安装: npm install vue 根据自己的情况选择一种Ajax工具,如axios、jQuery等。 步骤二:无限加载功能实现 创建一个包含…

    Vue 2023年5月29日
    00
  • vue前端传空值、空字符串的问题及解决

    问题描述: 在vue前端开发中,我们经常会遇到前端向后端传递的数据中包含空值、空字符串的情况,例如:表单中有些输入框没有填写或者选择,这会导致后端无法正确的处理这些参数,产生一些不必要的错误或者异常。那么,如何解决这个问题呢? 解决方案: vue前端传空值、空字符串的问题,我们主要可以考虑两种解决方案:一种是通过数组的方式处理空值、空字符串的情况,另一种是通…

    Vue 2023年5月27日
    00
  • vue-cli3 项目优化之通过 node 自动生成组件模板 generate View、Component

    下面是详细讲解 vue-cli3 项目优化之通过 node 自动生成组件模板 generate View、Component 的完整攻略。 1. 什么是 vue-cli3? Vue CLI 是一个官方发布的 Vue.js 项目脚手架,提供了标准化、插件化的 Vue 项目开发体验。vue-cli3 是 Vue CLI 的第三个版本,相较于前两个版本,vue-c…

    Vue 2023年5月28日
    00
  • vue 使用print-js 打印渲染不出来问题

    下面是详细的攻略说明: 问题描述 Vue 使用 print-js 打印时,有时候会存在打印内容渲染不出来的问题。这种情况通常出现在需要打印的内容比较复杂,包含了 Vue 组件、异步请求等复杂元素。 解决方法 方法一:将需要打印的内容先进行渲染 需要将需要打印的内容先使用 Vue 的 $mount 方法进行渲染,然后将渲染后的 DOM 节点作为参数传递给 pr…

    Vue 2023年5月28日
    00
  • Vue Promise的axios请求封装详解

    标题:Vue Promise的Axios请求封装详解 简介:Vue.js 是一款轻量级、渐进式的 JavaScript 框架,提供了数据驱动和组件化的思想,可用于构建任何复杂的单页面应用。而 Axios 是一个基于 Promise 的 HTTP 客户端,用于浏览器和 Node.js。在 Vue.js 开发中,我们常常需要用到 Axios 去请求后台数据。为了…

    Vue 2023年5月28日
    00
  • vue.js 输入框输入值自动过滤特殊字符替换中问标点操作

    下面是“vue.js 输入框输入值自动过滤特殊字符替换中问标点操作”的完整攻略。 一、需求背景 在开发 Web 应用时,有些输入框需要对用户输入的特殊字符进行过滤和转换操作,例如将中文标点符号替换成英文标点符号。这样可以避免用户输入的字符对后续的数据处理、展示等造成影响,提高应用的稳定性和用户使用体验。 二、实现方法 1. Vue 指令实现输入框自动过滤 V…

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