热门标签 | 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)

转载请注明出处:


推荐阅读
  • 小编给大家分享一下Vue3中如何提高开发效率,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获, ... [详细]
  • 利用Node.js实现PSD文件的高效切图
    本文介绍了如何通过Node.js及其psd2json模块,快速实现PSD文件的自动化切图过程,以适应项目中频繁的界面更新需求。此方法不仅提高了工作效率,还简化了从设计稿到实际应用的转换流程。 ... [详细]
  • 本文详细介绍了 Node.js 中 OS 模块的 arch 方法,包括其功能、语法、参数以及返回值,并提供了具体的使用示例。 ... [详细]
  • 本文探讨了如何利用RxJS库在AngularJS应用中实现对用户单击和拖动操作的精确区分,特别是在调整区域大小的场景下。 ... [详细]
  • 本文详细介绍了如何在 Vue CLI 3.0 和 2.0 中配置 proxy 来解决开发环境下的跨域问题,包括具体的配置项和使用场景。 ... [详细]
  • Gradle 是 Android Studio 中默认的构建工具,了解其基本配置对于开发效率的提升至关重要。本文将详细介绍如何在 Gradle 中定义和使用共享变量,以确保项目的一致性和可维护性。 ... [详细]
  • 本文探讨了互联网服务提供商(ISP)如何可能篡改或插入用户请求的数据流,并提供了有效的技术手段来防止此类劫持行为,确保网络环境的安全与纯净。 ... [详细]
  • 本文详细介绍了如何在 Ubuntu 14.04 系统上搭建仅使用 CPU 的 Caffe 深度学习框架,包括环境准备、依赖安装及编译过程。 ... [详细]
  • ASP.NET 进度条实现详解
    本文介绍了如何在ASP.NET中使用HTML和JavaScript创建一个动态更新的进度条,并通过Default.aspx页面进行展示。 ... [详细]
  • 本文探讨了如何在 Spring MVC 框架下,通过自定义注解和拦截器机制来实现细粒度的权限管理功能。 ... [详细]
  • 理解浏览器历史记录(2)hashchange、pushState
    阅读目录1.hashchange2.pushState本文也是一篇基础文章。继上文之后,本打算去研究pushState,偶然在一些信息中发现了锚点变 ... [详细]
  • 本文详细介绍了如何在 Node.js 环境中利用 Nodemailer 库实现邮件发送功能,包括环境配置、代码实现及常见问题解决方法。 ... [详细]
  • Spring Security基础配置详解
    本文详细介绍了Spring Security的基础配置方法,包括如何搭建Maven多模块工程以及具体的安全配置步骤,帮助开发者更好地理解和应用这一强大的安全框架。 ... [详细]
  • 函子(Functor)是函数式编程中的一个重要概念,它不仅是一个特殊的容器,还提供了一种优雅的方式来处理值和函数。本文将详细介绍函子的基本概念及其在函数式编程中的应用,包括如何通过函子控制副作用、处理异常以及进行异步操作。 ... [详细]
  • 本文探讨了如何通过优化 DOM 操作来提升 JavaScript 的性能,包括使用 `createElement` 函数、动画元素、理解重绘事件及处理鼠标滚动事件等关键主题。 ... [详细]
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社区 版权所有