vue 使用js new Map()优化多个if else 执行方法

前言

  • 在实际开发中根据业务需求我们经常要判断情况,一个if 我们科技直接使用ES6就可以解决

  • 经常会出现根据不同的条件执行不同的方法,这是就会有多个if else 看起不太美观也费劲

  • js new map ()就可以解决这个问题,它就是一个容器,我们可以通过set,get存取东西

  • map 是以key value 形式存在的,只要我们把value存成方法,并且执行就可以解决问题了

  • 注意:map 的key注意类型,比如存的时候用的数字1,取的时候用字符串1,也会导致取不到

图片展示-注意:当你格式存储正确,取不到值报错可能是key类型不对

代码实现-dom-可以直接复制查看

<template>
  <div class="result-box">
    <el-form :inline="true" :model="form">
      <el-form-item label="第一个值">
        <el-input v-model="form.oneprice" placeholder="输入值"></el-input>
      </el-form-item>
​
      <el-form-item label="运算规则">
        <el-select v-model="form.region" placeholder="选择计算规则">
          <el-option label="乘法" value="1"></el-option>
          <el-option label="加法" value="2"></el-option>
          <el-option label="减法" value="3"></el-option>
        </el-select>
      </el-form-item>
​
      <el-form-item label="第二个值">
        <el-input v-model="form.twoprice" placeholder="输入值"></el-input>
      </el-form-item>
​
      <el-form-item label="计算结果">
        <el-input v-model="form.result" placeholder="请点击计算结果"></el-input>
      </el-form-item>
​
      <el-form-item>
        <el-button type="primary" @click="onSubmit">计算结果</el-button>
      </el-form-item>
    </el-form>
  </div>
</template>
​
<script>
export default {
  name: 'Newmap',
  data () {
    return {
      form: {
        // 计算值
        oneprice: null,
        twoprice: null,
        // 计算规则
        calculaterule: null,
        // 计算结果
        result: null
      },
      map: null
    }
  },
  created () {
    this.$nextTick(() => {
      this.map = new Map([
        ['1', this.calculatemultiplication],
        ['2', this.calculateaddition],
        ['3', this.calculatesubtraction]
      ])
    })
  },
  methods: {
    // x - 第一个值
    // y - 第二个值
    // 乘法
    calculatemultiplication (x, y) {
      this.$message.success('执行乘法')
      this.form.result = x * y
    },
    // 加法
    calculateaddition (x, y) {
      this.$message.success('执行加法')
      this.form.result = Number(x) + Number(y)
    },
    // 减法
    calculatesubtraction (x, y) {
      this.$message.success('执行减法')
      this.form.result = Number(x) - Number(y)
    },
​
    // 计算结果
    onSubmit () {
      // if else - 优化之前
      // if (this.form.region == 1) {
      //   this.calculatemultiplication(this.form.oneprice, this.form.twoprice)
      // } else if (this.form.region == 2) {
      //   this.calculateaddition(this.form.oneprice, this.form.twoprice)
      // } else if (this.form.region == 3) {
      //   this.calculatesubtraction(this.form.oneprice, this.form.twoprice)
      // } else {
      //   // 默认处理
      // }
​
      // 使用new map ()优化之后
      let dispose = this.map.get(this.form.region)
      dispose(this.form.oneprice, this.form.twoprice)
    }
  }
}
</script>
​
<style lang="scss" scoped>
.result-box {
  padding: 40px 20px;
}
</style>
 

总结:

经过这一趟流程下来相信你也对 vue 使用js new Map()优化多个if else 执行方法 有了初步的深刻印象,但在实际开发中我 们遇到的情况肯定是不一样的,所以我们要理解它的原理,万变不离其宗。加油,打工人!

有什么不足的地方请大家指出谢谢 -- 風过无痕

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
下面是一个使用 Web Workers 在 Vue.js 2 中实现切片上传文件的示例代码: 1. 创建 worker.js 文件,该文件包含要在后台线程中执行JavaScript 代码。例如: ``` // worker.js // 监听主线程发送的消息 self.addEventListener('message', function(e) { const data = e.data; if (data.type === 'slice') { // 如果接收到的消息类型是 'slice' const file = data.file; const start = data.start; const end = data.end; // 读取文件切片并将其发送回主线程 const reader = new FileReader(); reader.onload = function(e) { const slice = e.target.result; self.postMessage({ type: 'slice', slice }); }; reader.readAsArrayBuffer(file.slice(start, end)); } else if (data.type === 'merge') { // 如果接收到的消息类型是 'merge' const slices = data.slices; const filename = data.filename; // 合并文件切片并将其发送回主线程 const blob = new Blob(slices); const url = URL.createObjectURL(blob); self.postMessage({ type: 'merge', url, filename }); } }); ``` 2. 在 Vue.js 组件中创建一个 Worker 对象,并将 worker.js 文件作为参数传递给它。例如: ``` // MyComponent.vue export default { data() { return { file: null, // 上传的文件 slices: [], // 文件切片 sliceSize: 1024 * 1024, // 切片大小 uploaded: false, // 是否上传完成 url: null // 上传完成后文件的 URL }; }, methods: { sliceFile() { // 读取文件并切片 const file = this.file; const sliceSize = this.sliceSize; const slices = []; let start = 0; let end = sliceSize; while (start < file.size) { slices.push({ start, end }); start = end; end = start + sliceSize; if (end > file.size) { end = file.size; } } this.slices = slices; // 创建一个 Worker 对象 const worker = new Worker('worker.js'); // 监听 worker 发送的消息 worker.addEventListener('message', (e) => { const data = e.data; if (data.type === 'slice') { // 如果接收到的消息类型是 'slice' // 将切片保存到 slices 中 slices[data.index].slice = data.slice; } else if (data.type === 'merge') { // 如果接收到的消息类型是 'merge' // 将合并后的文件 URL 保存到组件的 data 中 this.url = data.url; this.uploaded = true; } }); // 向 worker 发送切片请求 slices.forEach((slice, index) => { const { start, end } = slice; worker.postMessage({ type: 'slice', file, start, end, index }); }); // 向 worker 发送合并请求 worker.postMessage({ type: 'merge', slices: slices.map(slice => slice.slice), filename: file.name }); } } }; ``` 在这个示例中,我们在 MyComponent.vue 组件中创建了一个 Worker 对象,并监听了 worker 发送的消息。当 worker 发送一条类型为 'slice' 的消息时,我们将文件切片保存到组件的 data 中的 slices 数组中。当 worker 发送一条类型为 'merge' 的消息时,我们将合并后的文件 URL 保存到组件的 data 中的 url 字段中,并将 uploaded 字段设置为 true。 在 sliceFile 方法中,我们首先读取文件并切片,然后创建一个 Worker 对象,并向它发送切片请求和合并请求。在发送切片请求时,我们将文件、切片起始位置、切片结束位置和切片索引作为参数传递给 worker。在发送合并请求时,我们将切片数组、文件名作为参数传递给 worker。 这样,我们就可以使用 Web Workers 在 Vue.js 2 中实现切片上传文件了。请注意,由于 Web Workers 与主线程是分离的,因此它们不能直接访问 Vue.js 组件中的 data 和 methods,需要通过消息传递来完成。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

-風过无痕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值