elementui动态表单实现计算属性携带参数,并将计算出的值四舍五入保留两位小数

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


前言

写项目的时候,遇到需要在动态表单中,将同一级输入框输入的内容计算出来,并动态显示,发现computer计算属性好像不能带参数,最后查了好多文档才解决,看下面简单案例


方法1

vue中computed计算属性无法直接进行传参,如果有传参数的需求可以使用闭包函数(也叫匿名函数)实现。例如计算出每一组A输入框中的值+B输入框中的值并动态显示在C输入框中

js 复制代码
<template>
  <div id="app">
    <el-form ref="form" :model="form" label-width="80px">
      <div class="box" v-for="(item,index) in list" :key="index">
        <el-form-item label="A">
          <el-input v-model="item.A"></el-input>
        </el-form-item>
        <el-form-item label="B">
          <el-input v-model="item.B"></el-input>
        </el-form-item>
        <el-form-item label="C">
          <el-input :value="ab(index,item.A,item.B)"></el-input>
        </el-form-item>
      </div>
    </el-form>
  </div>
</template>

<script>
export default {
  computed: {
    ab() {
      return function (index, val1, val2) {
      	// 除以1,是为了强制转换成number类型
        let val3 = val1 / 1 + val2 / 1
        this.list[index].C = this.js(val3)
        return this.list[index].C
      }
    }
  },
  data() {
    return {
      list: [
        {
          A: null,
          B: null,
          C: null
        },
        {
          A: null,
          B: null,
          C: null
        }
      ]
    }
  },
  methods: {
    // 四舍五入保留两位小数
    js(val) {
      return (Math.round(val * 100) / 100).toFixed(2)
    }
  }
}
</script>

方法2

也可以直接写成methods里的方法,但是不推荐使用methods(没有缓存),具体为啥可以看看vue官网method和computed的区别

js 复制代码
<template>
  <div id="app">
    <el-form ref="form" :model="form" label-width="80px">
      <div class="box" v-for="(item,index) in list" :key="index">
        <el-form-item label="A">
          <el-input v-model="item.A" @change="ab(index)"></el-input>
        </el-form-item>
        <el-form-item label="B">
          <el-input v-model="item.B" @change="ab(index)"></el-input>
        </el-form-item>
        <el-form-item label="C">
          <el-input :value="item.C"></el-input>
        </el-form-item>
      </div>
    </el-form>
  </div>
</template>

<script>
export default {
  data() {
    return {
      list: [
        {
          A: null,
          B: null,
          C: null
        },
        {
          A: null,
          B: null,
          C: null
        }
      ]
    }
  },
  methods: {
    // 四舍五入保留两位小数
    js(val) {
      return (Math.round(val * 100) / 100).toFixed(2)
    },
    ab(index){
    	let val3 = this.list[index].A/1 + this.list[index].B/1
        this.list[index].C = this.js(val3)
        return this.list[index].C
    }
  }
}

结论

个人感觉还是第一种用的爽

相关推荐
fruge2 分钟前
Webpack 5 优化指南:分包策略、缓存配置及构建速度提升 60%
前端·缓存·webpack
相逢一笑与君行5 分钟前
css使用grid布局实现网格(表格),动态调整行高,列宽,整体缩放,插入行,列,删除行,列
前端·css·react
拾忆,想起6 分钟前
Dubbo序列化性能优化实战:从协议选型到极致调优
前端·微服务·性能优化·架构·dubbo·safari
大猩猩X6 分钟前
vxe-gantt vue table 甘特图子任务多层级自定义模板用法
vue.js·甘特图·vxe-table·vxe-ui
diegoXie7 分钟前
【R】正则的惰性和贪婪匹配
java·前端·r语言
韩曙亮9 分钟前
【Web APIs】元素可视区 client 系列属性 ( client 属性简介 | 常用的 client 属性 | 使用场景 | 代码示例 )
前端·javascript·css·css3·bom·client·web apis
恋猫de小郭9 分钟前
让 AI 用 Flutter 实现了猗窝座的破坏杀·罗针动画,这个过程如何驯服 AI
android·前端·flutter
不一样的少年_11 分钟前
【错误监控】别只做工具人了!手把手带你写一个前端错误监控 SDK
前端·javascript·监控
艾小码18 分钟前
还在手动处理页面跳转?掌握Vue Router 4,你的导航效率翻倍!
前端·javascript·vue-router
锋行天下8 小时前
公司内网部署大模型的探索之路
前端·人工智能·后端