vue根据条件不同显示不同按钮的操作


Posted in Javascript onAugust 04, 2020

我就废话不多说了,大家还是直接看代码吧~

<template slot-scope="scope">
 <el-button v-if="scope.row.isDeleted === 0" @click="lowerShelf(scope.row.id)" size="mini" type="primary" plain>下架</el-button>
 <el-button v-else size="mini" type="primary" plain>已下架</el-button>
</template>

补充知识:vue 过滤器之根据不同的类型渲染不同的字段

本文旨在分享如何利用vue过滤器,实现简单、高效的对同一个字段不同的字段值,渲染出不同的内容。

实际场景中我们可能会遇到后端在传给我们的数据中,某一个字段为type,type的值有1、2、3、4、5、6等,

1-6分别对应的是,苹果、梨、葡萄、芒果、香蕉、百香果。如何通过写最少的代码就能实现将他们一一对应起来呢?下面将一一介绍:

<ul>
 <li v-for="(d,index) in value" :key="index">
 {{d.type| filterType}}
 </li>
 </ul>

首先最初级的做法就是:在拿到数据后我们可能会用if/else来判断,如下所示:

filters: {
 filterType: function(val) {
 // 1、苹果 2、梨 3、葡萄 4、芒果 5、香蕉 6、百香果
 if (val ==== 1) {
 return '苹果'
 } else if (val ==== 2) {
 return '梨'
 } else if (val ==== 3) {
 return '葡萄'
 } else if (val === 4) {
 return '芒果'
 } else if (val === 5) {
 return '香蕉'
 } else if (val === 6) {
 return '百香果'
 } else {
 return '未知类型'
 }
 }
 }

这种写法是可以实现需求的,但是随着type的值逐渐增多,else if 的代码块会越来越臃肿,这种写法带来的后果就是可读性越来越差,且写法也不优雅,如何优化这点呢?我们可以使用switch:

filters: {
 filterType: function(val) {
 // 1、苹果 2、梨 3、葡萄 4、芒果 5、香蕉 6、百香果
 switch (val) {
 case 1:
  return '苹果'
  break;
 case 2:
  return '梨'
  break;
 case 3:
  return '葡萄'
  break;
 case 4:
  return '芒果'
  break;
 case 5:
  return '香蕉'
  break;
 case 6:
  return '百香果'
  break;
 default:
  return '未知类型'
 }
 }
 }

这样写比if/else 的写法可读性提高了不少,但是代码量还是挺多的,一个小功能用了这么多代码,实在是不能忍受,那怎么减少代码量呢?请往下看。。

filters: {
 filterType: function(val) {
 // 1、苹果 2、梨 3、葡萄 4、芒果 5、香蕉 6、百香果
 var typeArr = ['苹果', '梨' , '葡萄', '芒果', '香蕉', '百香果'];
 return typeArr[val-1];
 }
}

我们可以把存在的类型值放在数组里面,通过传入的type作为数组的下表,即可取到对应的值。这里要特别要提示一下,若type的值是从1开始,那传入的val就要减一,数组的下标是从0开始。

可以看到,这样写我们的确是少写了很多代码,但是有个问题,上面的方法只适用于1-n这种有顺序的正整数类型,假如type为-1,1,2,3,23 这种无序的情况就不适用了,怎么解决呢?且看下面

filters: {
 filterType: function(val) {
 // -1、苹果 2、梨 6、葡萄 8、芒果 13、香蕉 156、百香果
 let typeArr = [{"-1": "苹果"},{"2": "梨"},{"6": "葡萄"},{"8": "芒果"},{"13": "香蕉"},{"156": "百香果"}];
 let result = originTypeArr.filter((item) => Object.keys(item)[0] == row.type);
 return result.length > 0 ? result[0][row.type] : '未知类型';
 }
}

上面这个写法将type值作为对象的键值,通过filtes和Object.keys拿到数组中所有的键值,判断传入的val 是否和遍历的key值相等,来取到对应的value值

最后两种方法具体使用看具体场景,若是连续的正整数,可以直接使用第二种方法,若是需要扩展性强的,直接使用最后一种。

如有更好的写法,欢迎交流!!

以上这篇vue根据条件不同显示不同按钮的操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JS Excel读取和写入操作(模板操作)实现代码
Apr 11 Javascript
javascript实现table选中的行以指定颜色高亮显示的方法
May 13 Javascript
Vue.js基础学习之class与样式绑定
Mar 20 Javascript
从零开始学习Node.js系列教程一:http get和post用法分析
Apr 13 Javascript
JavaScript中一些特殊的字符运算
Aug 17 Javascript
C#实现将一个字符转换为整数
Dec 12 Javascript
使用Node.js写一个代码生成器的方法步骤
May 10 Javascript
layer.open 获取不到表单信息的解决方法
Sep 26 Javascript
JavaScript Dom 绑定事件操作实例详解
Oct 02 Javascript
JavaScript原型式继承实现方法
Nov 06 Javascript
layui table表格数据的新增,修改,删除,查询,双击获取行数据方式
Nov 14 Javascript
解决Nuxt使用axios跨域问题
Jul 06 Javascript
如何在Vue.JS中使用图标组件
Aug 04 #Javascript
如何构建 vue-ssr 项目的方法步骤
Aug 04 #Javascript
vue-quill-editor的使用及个性化定制操作
Aug 04 #Javascript
vue 添加和编辑用同一个表单,el-form表单提交后清空表单数据操作
Aug 03 #Javascript
浅谈vue中get请求解决传输数据是数组格式的问题
Aug 03 #Javascript
VUE使用axios调用后台API接口的方法
Aug 03 #Javascript
vue cli3.0打包上线静态资源找不到路径的解决操作
Aug 03 #Javascript
You might like
Grid得到选择行数据的方法总结
2011/01/17 Javascript
仿百度联盟对联广告实现代码
2014/08/30 Javascript
JavaScript及jquey实现多个数组的合并操作
2014/09/06 Javascript
node.js [superAgent] 请求使用示例
2015/03/13 Javascript
jquery中ajax处理跨域的三大方式
2016/01/05 Javascript
详解微信小程序 页面跳转 传递参数
2016/12/08 Javascript
深入了解JavaScript的逻辑运算符(与、或)
2016/12/20 Javascript
详解从Node.js的child_process模块来学习父子进程之间的通信
2017/03/27 Javascript
jQuery使用ajax_动力节点Java学院整理
2017/07/05 jQuery
基于百度地图api清除指定覆盖物(Overlay)的方法
2018/01/26 Javascript
详解 微信小程序开发框架(MINA)
2019/05/17 Javascript
js与jquery获取input输入框中的值实例讲解
2020/02/27 jQuery
Python学习笔记之os模块使用总结
2014/11/03 Python
Python多进程通信Queue、Pipe、Value、Array实例
2014/11/21 Python
Python基于FTP模块实现ftp文件上传操作示例
2018/04/23 Python
十个Python练手的实战项目,学会这些Python就基本没问题了(推荐)
2019/04/26 Python
浅谈Python小波分析库Pywavelets的一点使用心得
2019/07/09 Python
Python使用grequests(gevent+requests)并发发送请求过程解析
2019/09/25 Python
Django实现CAS+OAuth2的方法示例
2019/10/30 Python
django实现用户注册实例讲解
2019/10/30 Python
Python + selenium + crontab实现每日定时自动打卡功能
2020/03/31 Python
如何在python中实现线性回归
2020/08/10 Python
利用python如何实现猫捉老鼠小游戏
2020/12/04 Python
细说CSS3中的选择符
2008/10/17 HTML / CSS
支持IE8的纯css3开发的响应式设计动画菜单教程
2014/11/05 HTML / CSS
KEEN美国官网:美国人气户外休闲鞋品牌
2021/03/09 全球购物
幼儿教师个人求职信范文
2013/09/21 职场文书
电子商务专业毕业生工作推荐信
2013/11/17 职场文书
高中历史教学反思
2014/02/08 职场文书
食品安全工作方案
2014/05/07 职场文书
投标承诺书怎么写
2014/05/24 职场文书
违反交通法规检讨书
2014/09/10 职场文书
涪陵白鹤梁导游词
2015/02/09 职场文书
义卖募捐活动总结
2015/05/09 职场文书
门球健将观后感
2015/06/16 职场文书
培训简讯范文
2015/07/20 职场文书