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 相关文章推荐
再论Javascript下字符串连接的性能
Mar 05 Javascript
鼠标滑上去后图片放大浮出效果的js代码
May 28 Javascript
自定义ExtJS控件之下拉树和下拉表格附源码
Oct 15 Javascript
JavaScript实现网站访问次数统计代码
Aug 12 Javascript
JS实现仿QQ面板的手风琴效果折叠菜单代码
Sep 11 Javascript
3种js实现string的substring方法
Nov 09 Javascript
js+flash实现的5图变换效果广告代码(附演示与demo源码下载)
Apr 01 Javascript
jQuery zTree树插件简单使用教程
Jan 10 Javascript
利用Plupload.js解决大文件上传问题, 带进度条和背景遮罩层
Mar 15 Javascript
使用Browserify来实现CommonJS的浏览器加载方法
May 14 Javascript
vue bootstrap小例子一枚
Jun 09 Javascript
React + Threejs + Swiper 实现全景图效果的完整代码
Jun 28 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
异世界新番又来了,同样是从零开始,男主的年龄降到5岁
2020/04/09 日漫
分享3个php获取日历的函数
2015/09/25 PHP
thinkPHP5框架路由常用知识点汇总
2019/09/15 PHP
jquery select(列表)的操作(取值/赋值)
2009/08/06 Javascript
js 强制弹出窗口代码研究-又一款代码
2010/03/20 Javascript
jquery的$(document).ready()和onload的加载顺序
2010/05/26 Javascript
jQuery中hover与mouseover和mouseout的区别分析
2015/12/24 Javascript
深入学习AngularJS中数据的双向绑定机制
2016/03/04 Javascript
AngularJS基础 ng-disabled 指令详解及简单示例
2016/08/01 Javascript
JS获取当前使用的浏览器名字以及版本号实现方法
2016/08/19 Javascript
JavaScript条件判断_动力节点Java学院整理
2017/06/26 Javascript
vue元素实现动画过渡效果
2017/07/01 Javascript
基于jQuery实现的设置文本区域的光标位置
2018/06/15 jQuery
浅谈react-router@4.0 使用方法和源码分析
2019/06/04 Javascript
微信小程序canvas分享海报功能
2019/10/31 Javascript
基于Vue+ElementUI的省市区地址选择通用组件
2019/11/20 Javascript
web.py 十分钟创建简易博客实现代码
2016/04/22 Python
pandas多级分组实现排序的方法
2018/04/20 Python
在python中画正态分布图像的实例
2019/07/08 Python
Python中 CSV格式清洗与转换的实例代码
2019/08/29 Python
关于tensorflow的几种参数初始化方法小结
2020/01/04 Python
Python range与enumerate函数区别解析
2020/02/28 Python
Python3 hashlib密码散列算法原理详解
2020/03/30 Python
GafasWorld西班牙:购买太阳镜、眼镜和隐形眼镜
2019/09/08 全球购物
英国最大的天然和有机产品在线零售商之一:Big Green Smile
2020/05/06 全球购物
是否有自动比较结构的方法
2015/06/03 面试题
线程问题:wait()方法是定义在哪个类里面
2015/07/07 面试题
2013年大学生的自我鉴定
2013/10/24 职场文书
办公室文员工作职责
2014/01/31 职场文书
策划创业计划书
2014/02/06 职场文书
离婚协议书范本(2014版)
2014/09/28 职场文书
周年庆典答谢词
2015/01/20 职场文书
2016年五一劳动节专题校园广播稿
2015/12/17 职场文书
Pandas||过滤缺失数据||pd.dropna()函数的用法说明
2021/05/14 Python
Canvas绘制像素风图片的示例代码
2021/09/25 HTML / CSS
vue @click.native 绑定原生点击事件
2022/04/22 Vue.js