热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【VUE项目实战】44、渲染静态属性和动态参数的Tab

接上篇《43、参数管理模块基本结构搭建》上一篇我们完成添了参数管理模块的基本结构编写,并实现了商品分类的级联选择。本篇我们来渲染静态属性和动态参数的Tab页签。一、

接上篇《43、参数管理模块基本结构搭建》
上一篇我们完成添了参数管理模块的基本结构编写,并实现了商品分类的级联选择。本篇我们来渲染静态属性和动态参数的Tab页签。


一、实现Tab页签切换

这里我们需要用到一个新的ElementUI组件,名为“Tabs标签页”:

它的基本用法就是实现不同页签之间的切换。下面是官网针对上图效果的示例代码:


基本上就是el-tabs和下面el-tab-pane多面板的组合,然后el-tabs可以绑定一个点击触发事件,可以获取到当前点击的Tab页签对象以及事件。v-model用来做双向数据绑定,上面的“activeName”动态绑定的是里面el-tab-pane的name值。

下面我们在Params.vue的“选择商品分类区域”下面,添加“Tab页签区域”,复制刚刚的代码,进行修改,实现我们静态属性和动态参数的Tab页签:


动态参数静态属性

注:使用“el-tabs”记得在element.js中引入“Tabs”和“TabPane”插件。

然后在数据定义区定义activeName:

data(){return{//商品分类列表catelist: [],//指定级联选择器的配置对象cascaderProps: {value: 'cat_id',label: 'cat_name',children: 'children',leaf: 'cat_level',expandTrigger: 'hover', //悬浮显示},//选中的商品分类的IDselectedKeys :[],//被激活的页签名称(默认first)activeName: 'first'}
},

然后在方法区定义Tab页签点击事件函数handleTabClick:

//Tab页签点击事件的处理函数
handleTabClick(){console.log(this.activeName);//打印被点击的页面名
}

效果:


二、增加“添加参数”和“添加属性”按钮

我们需要分别在静态属性和动态参数的Tab页签下新增“添加参数”和“添加属性”按钮,并实现没有选择三级商品时,按钮为不可用状态的效果:

首先在对应的页签渲染相关按钮:


添加参数添加属性

然后我们需要实现不选择三级商品就禁用按钮的效果,条件其实很简单,就是级联选择框的选中数组“selectedKeys”的长度不为3时,说明选中的不是三级分类,此时就应该禁用按钮,我们可以在按钮上添加一个计算属性,根据“selectedKeys”的情况计算一个按钮是否展示的boolean值。

我们在方法区外再添加一个“computed”区域,该区域的大致含义是(参考《Vue中的watch与computed》(作者:gunelark)):


●computed用来监控自己定义的变量,该变量不在data里面声明,直接在computed里面定义,然后就可以在页面上进行双向数据绑定展示出结果或者用作其他处理;
●computed比较适合对多个变量或者对象进行处理后返回一个结果值,也就是数多个变量中的某一个值发生了变化则我们监控的这个值也就会发生变化,举例:购物车里面的商品列表和总金额之间的关系,只要商品列表里面的商品数量发生变化,或减少或增多或删除商品,总金额都应该发生变化。这里的这个总金额使用computed属性来进行计算是最好的选择


我们创建“computed”区域后,在里面新增一个“isBtnDisable”方法,返回按钮是否禁用的boolean值:

computed:{// 判断按钮是否需要被禁用的方法isBtnDisable(){if(this.selectedKeys.length!==3){return true;}return false;}
}

然后在按钮上添加disable属性,并指向“isBtnDisable”方法动态计算的boolean结果:


添加参数添加属性

效果:


三、获取Tab表格数据

接下来我们要根据选择的页签,通过API接口获取数据并渲染到各自Tab页的表格中。
需要调用的API文档如下:

●响应数据:

{"data": [{"attr_id": 1,"attr_name": "cpu","cat_id": 22,"attr_sel": "only","attr_write": "manual","attr_vals": "ffff"}],"meta": {"msg": "获取成功","status": 200}
}

这里我们可以通过sel来分别获取静态属性还是动态参数。

由于我们接口传输是需要传递选中的三级分类的ID的,这里我们可以在动态监听区域“computed”再添加一个名为“”的监听方法,用来动态获取选中的三级分类的ID:

//当前选中的三级分类的ID
cateId(){if(this.selectedKeys.length===3){return this.selectedKeys[2];}return null;
}

我们需要在级联选择到三级分类的时候,来根据当前所在的页签请求API,我们编写一个名为“getParamsData”的方法,来通过条件获取不同的数据:

// 获取参数的列表数据
async getParamsData(){//选中的不是三级分类就清空选中数组if(this.selectedKeys.length!==3){this.selectedKeys = [];return;}console.log(this.selectedKeys);//根据选中分类ID,和当前所处的页签,获取对应的参数:const {data: res} = await this.$http.get("categories/"+this.cateId+"/attributes",{params:{sel:this.activeName=="first"?"many":"only"}});if(res.meta.status!==200){return this.$message.error('获取参数列表失败!')}console.log(res.data);//打印获取到的参数列表数据//根据不同的Tab页签分别赋值不同的对象if(this.activeName==="first"){this.manyTableData = res.data;}else{this.onlyTableData = res.data;}
}
},

然后在data数据区定义“manyTableData”和“onlyTableData”对象,他俩分别是动态参数有和静态属性的数据对象:

data(){return{//商品分类列表catelist: [],//指定级联选择器的配置对象cascaderProps: {value: 'cat_id',label: 'cat_name',children: 'children',leaf: 'cat_level',expandTrigger: 'hover', //悬浮显示},//选中的商品分类的IDselectedKeys :[],//被激活的页签名称(默认first)activeName: 'first',//动态参数的数据manyTableData: [],//静态属性的数据onlyTableData: []}
},

然后我们将该方法分别放在级联选择的变化监听函数“handleChanged”和Tab页签点击变化监听函数“handleTabClick”中:

//商品级联选择项发生变化触发这个函数
handleChanged(){this.getParamsData();
},
//Tab页签点击事件的处理函数
handleTabClick(){console.log(this.activeName);//打印被点击的页面名this.getParamsData();
},

效果:


四、渲染Tab页数据表格

我们分别在不同页签的el-tab-pane页签中添加el-table,用来渲染参数数据表格:


添加参数添加属性

效果:

此时我们的两个Tab页签表格算是初步渲染完毕了。
下一篇我们来详细开发两个Tab页签中的展开行选项值等核心功能。

参考:
黑马程序员(www.itheima.com)Vue项目实战教学视频
《Vue中的watch与computed》(作者:gunelark)

转载请注明出处:


推荐阅读
  • 使用nodejs爬取b站番剧数据,计算最佳追番推荐
    本文介绍了如何使用nodejs爬取b站番剧数据,并通过计算得出最佳追番推荐。通过调用相关接口获取番剧数据和评分数据,以及使用相应的算法进行计算。该方法可以帮助用户找到适合自己的番剧进行观看。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文介绍了Perl的测试框架Test::Base,它是一个数据驱动的测试框架,可以自动进行单元测试,省去手工编写测试程序的麻烦。与Test::More完全兼容,使用方法简单。以plural函数为例,展示了Test::Base的使用方法。 ... [详细]
  • 本文介绍了在Vue项目中如何结合Element UI解决连续上传多张图片及图片编辑的问题。作者强调了在编码前要明确需求和所需要的结果,并详细描述了自己的代码实现过程。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • JDK源码学习之HashTable(附带面试题)的学习笔记
    本文介绍了JDK源码学习之HashTable(附带面试题)的学习笔记,包括HashTable的定义、数据类型、与HashMap的关系和区别。文章提供了干货,并附带了其他相关主题的学习笔记。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文探讨了C语言中指针的应用与价值,指针在C语言中具有灵活性和可变性,通过指针可以操作系统内存和控制外部I/O端口。文章介绍了指针变量和指针的指向变量的含义和用法,以及判断变量数据类型和指向变量或成员变量的类型的方法。还讨论了指针访问数组元素和下标法数组元素的等价关系,以及指针作为函数参数可以改变主调函数变量的值的特点。此外,文章还提到了指针在动态存储分配、链表创建和相关操作中的应用,以及类成员指针与外部变量的区分方法。通过本文的阐述,读者可以更好地理解和应用C语言中的指针。 ... [详细]
  • 本文介绍了如何使用Express App提供静态文件,同时提到了一些不需要使用的文件,如package.json和/.ssh/known_hosts,并解释了为什么app.get('*')无法捕获所有请求以及为什么app.use(express.static(__dirname))可能会提供不需要的文件。 ... [详细]
  • Java自带的观察者模式及实现方法详解
    本文介绍了Java自带的观察者模式,包括Observer和Observable对象的定义和使用方法。通过添加观察者和设置内部标志位,当被观察者中的事件发生变化时,通知观察者对象并执行相应的操作。实现观察者模式非常简单,只需继承Observable类和实现Observer接口即可。详情请参考Java官方api文档。 ... [详细]
author-avatar
何处逐梦_273
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有