区别

  • 计算属性可以简化差值表达式写法
  • 计算属性变量定义在computed中,可以直接使用在{}中的,跟methods中函数类似,只不过有利于缓存,性能更好
  • 计算属性可以防止监听属性的滥用,但一些异步请求,计算属性做不到,还得watch来完成。

例如:解决element-ui分页中删除页面最后一条数据时,currentPage没有减一,页面列表为空问题时,就可以用到监听属性

监听页面的总条数,并对总条数进行判断。从而刷新列表

<el-paginationlayout="prev, pager, next"@current-change="changePageNum":current-page="currentPage":page-size="pageSize":total="total">
</el-pagination>
watch:{total(){if(this.total==(this.currentPage-1)*this.pageSize&& this.total!=0){this.currentPage-=1;getDiscountList(this);//获取列表数据}}}

要使用分页,返回部分数据时,可以使用计算属性

    computed: {limitData() {let data = [...this.table1Datas];return data;},// 因为要动态计算总页数,所以还需要一个计算属性来返回最终给 Table 的 datadataWithPage() {const data = this.limitData;const start = this.current * this.size - this.size;const end = start + this.size;return [...data].slice(start, end);},//替换数据中的回车符content: function(msg) {return msg.replace('\n', '<br>');},},

计算属性和监听属性结合起来用

结合使用效果更佳

  • 需求:根据公积金比率和员工工资,计算公积金数
<Form ref="form" :model="data" :rules="rules" label-position="top" class="ivu-mt"><Card :bordered="false" dis-hover title="五险一金信息"><Row :gutter="24"><Col :xl="12" :lg="12" :md="12" :sm="24" :xs="24"><FormItem label="养老金基数:"><Input :readonly="true" v-model="data.pensionBase" placeholder="自动计算"/></FormItem></Col><Col :xl="12" :lg="12" :md="12" :sm="24" :xs="24"><FormItem label="养老金比率:" prop="pensionPer" label-for="pensionPer"><Input :readonly="true" v-model="data.pensionPer" placeholder="请输入"element-id="pensionPer"/></FormItem></Col><Col :xl="12" :lg="12" :md="12" :sm="24" :xs="24"><FormItem label="医疗基数:"><Input :readonly="true" v-model="data.medicalBase" placeholder="自动计算"/></FormItem></Col><Col :xl="12" :lg="12" :md="12" :sm="24" :xs="24"><FormItem label="医疗保险比率:" prop="medicalPer" label-for="medicalPer"><Input :readonly="true" v-model="data.medicalPer" placeholder="请输入"element-id="medicalPer"/></FormItem></Col><Col :xl="12" :lg="12" :md="12" :sm="24" :xs="24"><FormItem label="失业保险基数:"><Input :readonly="true" v-model="data.unempBase" placeholder="自动计算"/></FormItem></Col><Col :xl="12" :lg="12" :md="12" :sm="24" :xs="24"><FormItem label="失业保险比率:"><Input :readonly="true" v-model="data.unempPer"/></FormItem></Col><Col :xl="12" :lg="12" :md="12" :sm="24" :xs="24"><FormItem label="工伤保险基数:"><Input :readonly="true" v-model="data.injuryBase"/></FormItem></Col><Col :xl="12" :lg="12" :md="12" :sm="24" :xs="24"><FormItem label="工伤保险比率:"><Input :readonly="true" v-model="data.injuryPer"/></FormItem></Col><Col :xl="12" :lg="12" :md="12" :sm="24" :xs="24"><FormItem label="生育保险基数:"><Input :readonly="true" v-model="data.bithinsuranceBase"/></FormItem></Col><Col :xl="12" :lg="12" :md="12" :sm="24" :xs="24"><FormItem label="生育保险比率:"><Input :readonly="true" v-model="data.bithinsurancePer" placeholder="请输入"/></FormItem></Col><Col :xl="12" :lg="12" :md="12" :sm="24" :xs="24"><FormItem label="公积金基数:"><Input  v-model="data.accumulationFundBase" placeholder="不填则自动计算"/></FormItem></Col><Col :xl="12" :lg="12" :md="12" :sm="24" :xs="24"><FormItem label="公积金比率:"><Input v-model="data.accumulationFundPer" placeholder="不填则自动计算"/></FormItem></Col></Row>
</Card>
</Form>

通过监听属性监听数据的变化,结合计算属性,计算出相应值,然后返回即可

data() {return {data: {nickName:'',deptName: '',account: '',basicSalary: '',bonus: '0',lunchSalary: '0',leaveDel: '0',overworkAdd: '0',attendanceDel: '0',allSalary: '0',shouldSalary: '',createDate: '',//五险一金pensionBase: '',//养老金基数pensionPer: '0.08',//养老金比率medicalBase: '',//医疗基数medicalPer: '0.08',//医疗保险比率unempBase: '',//失业保险基数unempPer: '0.01',//失业保险比率injuryBase: '0',//工伤保险基数injuryPer: '0',//工伤保险比率bithinsuranceBase: '0',//生育保险基数bithinsurancePer: '0',//生育保险比率accumulationFundBase: '',//公积金基数accumulationFundPer: '',//公积金比率},}},computed: {labelWidth() {return this.isMobile ? undefined : 140;},labelPosition() {return this.isMobile ? 'top' : 'left';},//计算养老金基数newPensionBase() {return this.data.pensionPer * this.data.basicSalary;},//计算医疗基数newmedicalBase() {return this.data.medicalPer * this.data.basicSalary;},//计算失业保险基数newunempBase() {return this.data.unempPer * this.data.basicSalary;},//计算公积金比率newaccumulationFundPer() {let basicSalary = this.data.basicSalaryif (basicSalary != null) {switch (true) {/*1、工资范围在1-5000元之间的,包括百5000元,适用个人所得税税率为0%。 速算扣除数(元)0*/case basicSalary < 5000:this.data.accumulationFundPer = 0;return this.data.basicSalary * this.data.accumulationFundPer;break;/*2、工资范围在5000-8000元之间的,包括度8000元,适用个人所得税税率为3%。 速算扣除数(元)105*/case basicSalary >= 5000 && basicSalary <80000:this.data.accumulationFundPer = 0.03;return this.data.basicSalary * this.data.accumulationFundPer;break;/*3、工资范围在8000-17000元之间的,包括17000元,适用个人所得税税率为10%。速算扣除数(元)555*/case basicSalary >8000 && basicSalary <= 17000:this.data.accumulationFundPer = 0.1;return this.data.basicSalary * this.data.accumulationFundPer;break;/*4、工资范围在17000-30000元之间的,包括30000元,适用个人所得税税率为20%。速算扣除数(元)1005*/case basicSalary > 17000 && basicSalary <= 30000:this.data.accumulationFundPer = 0.2;return this.data.basicSalary * this.data.accumulationFundPer;break;/*5、工资范围在30000-40000元之间的,包括40000元,适用个人所得税税率为25%。速算扣除数(元)2755*/case basicSalary >30000 && basicSalary <= 40000:this.data.accumulationFundPer = 0.25;return this.data.basicSalary * this.data.accumulationFundPer;break;/*6、工资范围在40000-60000元之间的,包括60000元,适用个人所得税税率为30%。速算扣除数(元)5505*/case basicSalary >40000 && basicSalary <= 60000:this.data.accumulationFundPer = 0.3;return this.data.basicSalary * this.data.accumulationFundPer;break;/*7、工资范围超过60000的,适用个人所得税税率为45%。速算扣除数(元)13505*/case basicSalary >60000:this.data.accumulationFundPer = 0.45;return this.data.basicSalary * this.data.accumulationFundPer;break;default:break;}}}},watch: {//养老金基数newPensionBase(val) {this.data.pensionBase = val;},//医疗基数newmedicalBase(val) {this.data.medicalBase = val;},//失业保险基数newunempBase(val) {this.data.unempBase = val;},//公积金基数newaccumulationFundPer(val) {this.data.accumulationFundBase = val;}},

效果

vue计算属性和监听器区别相关推荐

  1. vue 计算属性和监听器区别

    上海疫情还没过去,裁员的噩耗又来了,,,快卷不动了!最近火急火燎的搞面试,趁复习面试题,总结一下.关于计算属性和监听器vue官方文档写的很简单,博客上也大相径庭.(我也只记的大概,哈哈)懒得查来查去所 ...

  2. vue计算属性与监听器的区别

    vue计算属性与监听器的区别 计算属性(computed) 监听器(watch) 监听data中没有的值 监听data中有的值 使用时触发 使用不会触发 值有变化就触发 值有变化就触发 没有settt ...

  3. [vue] watch和计算属性有什么区别?

    [vue] watch和计算属性有什么区别? 一个是侦听属性,一个是计算属性 2.一个是为了应对复杂的逻辑计算,一个是对数据的变化作出反应 3.一个是只有当缓存改变时才执行,一个是只要从新渲染就会执行 ...

  4. 计算属性与监听器、Vue 实例的生命周期

    本文是我在学习过程中记录学习的点点滴滴,仅仅为了学完之后巩固一下,日后忘记了也可以方便快速的复习. 计算属性与监听器.Vue 实例的生命周期 前言 一.计算属性 1.1.计算属性初步理解 1.2.计算 ...

  5. 你知道,什么时候用Vue计算属性吗?

    摘要:当我们处理复杂逻辑时,都应该使用计算属性. 本文分享自华为云社区<深入理解计算属性,知道什么时候该用Vue计算属性吗?>,作者: 前端老实人 . 计算属性 有些时候,我们在模板中放入 ...

  6. Vue计算属性、监视属性

    一.Vue计算属性 1. 定义:要用的属性不存在,要通过已有属性计算得来 2. 原理:底层借助了Object.defineproperty方法提供的getter和setter 3. get函数什么时候 ...

  7. Vue计算属性实现成绩单,Vue计算属性

    Vue计算属性实现成绩单 代码如下: <!DOCTYPE html> <html><head><meta charset="utf-8"& ...

  8. vue教程2-03 vue计算属性的使用 computed

    vue教程2-03 vue计算属性的使用 computed computed:{b:function(){ //默认调用getreturn 值}}--------------------------c ...

  9. vue修改计算属性的值_八.Vue计算属性

    Vue计算属性 前言 我们要做的是springboot和vue.js所做的前后端分离的hr项目,所以从来没接触到vue的小伙伴,可以这篇文章 学Vue入门,这一篇就够了 模板内的表达式非常便利,但是设 ...

最新文章

  1. java设置缓存机制
  2. UIView的几个枚举定义
  3. ADO.NET Entity Framework 入门示例向导(附Demo程序下载)
  4. 如果有机会,买一个能够兼容多终端的大屏幕是很重要的
  5. Nvidia GPU驱动与CUDA、Ubuntu内核兼容性问题的解决日志
  6. CCF NOI1011 正方形
  7. java基础之 反射_Java基础之反射原理与用法详解
  8. 【面经】字节算法面试三面
  9. Google浏览器安装Axure插件
  10. 大作业---Android本地音乐播放器开发知识点19145120
  11. 谷歌浏览器反复提示PageOffice安装
  12. Word2016写论文之——常用操作总结
  13. h20r1203功率管参数_电磁炉功率管H20R1353可以用H20R1203代换吗
  14. 前端开发必备神级资源
  15. matlab计算两向量的乘积,matlab中两个函数相乘
  16. RAAT: Relation-Augmented Attention Transformer for Relation Modeling in Document-Level 论文解读
  17. 2022暑期杭电第八场
  18. 怎么使用Git远程删除某个历史提交记录
  19. Android Manifest
  20. Android(安卓) 接入企业微信

热门文章

  1. 禁用 Microsoft 软件保护平台服务
  2. 台灯选什么样的对眼睛好些?2023这样的光线不伤眼睛
  3. Python爬取链家成都小区信息
  4. ubuntu查看图片命令
  5. INTEL workshop IOTG EDGE computing
  6. 无线网络领域国际会议/期刊排名
  7. 用Vue Node从零开始实现拼多多前后端商城项目 — 记录踩坑之旅(上篇)
  8. 南京交通违法曝光处理点大全(地址+上班时间)
  9. android appcompatv7,esclipe关于appcompat_v7错误的完美解决方案
  10. 苹果系统游戏平台怎样对接游戏?