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 相关文章推荐
jquery tools之tooltip
Jul 25 Javascript
JS 控制非法字符的输入代码
Dec 04 Javascript
jQuery(非HTML5)可编辑表格实现代码
Dec 11 Javascript
JavaScript中的apply和call函数详解
Jul 20 Javascript
JavaScript数据库TaffyDB用法实例分析
Jul 27 Javascript
Bootstrap每天必学之简单入门
Nov 19 Javascript
详解AngularJS验证、过滤器、指令
Jan 04 Javascript
Angular1.x自定义指令实例详解
Mar 01 Javascript
bootstrap table sum总数量统计实现方法
Oct 29 Javascript
解决vue v-for 遍历循环时key值报错的问题
Sep 06 Javascript
js实现自动播放匀速轮播图
Feb 06 Javascript
有趣的JavaScript隐式类型转换操作实例分析
May 02 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
PHP之变量、常量学习笔记
2008/03/27 PHP
ThinkPHP写第一个模块应用
2012/02/20 PHP
解决ajax+php中文乱码的方法详解
2013/06/09 PHP
yii框架结合charjs统计上一年与当前年数据的方法示例
2020/04/04 PHP
JavaScript基本对象
2007/01/11 Javascript
JS中prototype关键字的功能介绍及使用示例
2013/07/21 Javascript
JavaScript运行时库属性一览表
2014/03/14 Javascript
JS应用正则表达式转换大小写示例
2014/09/18 Javascript
理解javascript对象继承
2016/04/17 Javascript
Vuex 入门教程
2018/01/10 Javascript
提升node.js中使用redis的性能遇到的问题及解决方法
2018/10/30 Javascript
Angular使用Restful的增删改
2018/12/28 Javascript
vue 实现tab切换保持数据状态
2020/07/21 Javascript
[31:29]完美世界DOTA2联赛PWL S3 INK ICE vs Magma 第一场 12.20
2020/12/23 DOTA
Python下的twisted框架入门指引
2015/04/15 Python
python字典排序实例详解
2015/05/20 Python
python笔记:mysql、redis操作方法
2017/06/28 Python
详解django三种文件下载方式
2018/04/06 Python
Python判断一个文件夹内哪些文件是图片的实例
2018/12/07 Python
在pyqt5中QLineEdit里面的内容回车发送的实例
2019/06/21 Python
python射线法判断检测点是否位于区域外接矩形内
2019/06/28 Python
Python TCP通信客户端服务端代码实例
2019/11/21 Python
用python的turtle模块实现给女票画个小心心
2019/11/23 Python
python 实现矩阵填充0的例子
2019/11/29 Python
win10安装python3.6的常见问题
2020/07/01 Python
python3.7 openpyxl 在excel单元格中写入数据实例
2020/09/01 Python
python爬虫中的url下载器用法详解
2020/11/30 Python
编写用C语言实现的求n阶阶乘问题的递归算法
2014/10/21 面试题
初婚未育未抱养证明
2014/01/12 职场文书
幼儿园六一活动总结
2014/08/27 职场文书
讲文明懂礼貌演讲稿
2014/09/11 职场文书
2014年校长工作总结
2014/12/11 职场文书
优秀范文:《但愿人长久》教学反思3篇
2019/10/24 职场文书
600字作文之感受大自然
2019/11/27 职场文书
Ajax实现局部刷新的方法实例
2021/03/31 Javascript
日本十大血腥动漫,那些被禁播的动漫盘点
2022/03/21 日漫