当前位置:   article > 正文

一 , Element-UI tabs标签实现点击左右箭头 实现左右tab栏按个选中切换(正常是只会切换到后面空白tab栏 不会选中) .........二 , tabs标签切换不同的模板样式_@tab-click

@tab-click
  1. <!-- 导航栏 -->
  2. <div class="TAb">
  3. <div class="xiangzuo" @click="leftChange()">
  4. <!-- 左箭头 -->
  5. <i class="el-icon-arrow-left"></i>
  6. </div>
  7. <el-tabs class="TAB" v-model="activeIndex" @tab-click="handleClick"
  8. scrollable="true" >
  9. <el-tab-pane v-for="(item, index) in data" :key="item.id"
  10. :label="item.label" :name="index.toString()">
  11. <!-- 定义不同的切换列表样式 切换不同样式使用的插槽(没这需求可不写)-->
  12. <slot :name="item.label" :index="item.id" />
  13. </el-tab-pane>
  14. </el-tabs>
  15. <div class="xiangyou" @click="rightChange()">
  16. <!-- 右箭头 -->
  17. <i class="el-icon-arrow-right"></i>
  18. </div>
  19. </div>
  20. //xiangzuo , xiangyou 是左右箭头 定位到tab栏左右两侧
value / v-model绑定值,选中选项卡的 name

定义导航索引值 以及虚拟数据

  1. data(){
  2. return(){
  3. activeIndex: "0",
  4. // 导航列表
  5. data: [
  6. {
  7. id: 0,
  8. label: '熊大',
  9. name:'one'
  10. },
  11. {
  12. id: 1,
  13. label: '熊二',
  14. name:'two'
  15. },
  16. {
  17. id:2,
  18. label: '光头强',
  19. name:'there'
  20. },
  21. {
  22. id: 3,
  23. label: '李老板',
  24. name:'four'
  25. },
  26. ],
  27. }
  28. }

使用左右箭头方法

  1. methods: {
  2. // 导航栏左右箭头切换
  3. leftChange() {
  4. let num = Number(this.activeIndex)
  5. num > 0 && num--
  6. this.activeIndex = num.toString()
  7. },
  8. rightChange() {
  9. let num = Number(this.activeIndex)
  10. // this.data.length 数组长度
  11. num < this.data.length - 1 && num++
  12. this.activeIndex = num.toString()
  13. },
  14. }

到这里就实现左右箭头选中按个切换了

  顺带再拓展一下

二 , tabs标签切换的不同模板样式

需求肯定不会这么简单的 官网给定的模板是切换渲染不同的标题 但在真实场景下每个页面的模板样式肯定不会是一样的 所以我们需要封装组件 以插槽的形式渲染不同的模板样式

  1. //Tabs组件
  2. <!-- 导航栏 -->
  3. <div class="TAb">
  4. <div class="xiangzuo" @click="leftChange()">
  5. <!-- 左箭头 -->
  6. <i class="el-icon-arrow-left"></i>
  7. </div>
  8. <el-tabs class="TAB" v-model="activeIndex" @tab-click="handleClick"
  9. scrollable="true" >
  10. //data 父组件传递过来的数据
  11. <el-tab-pane v-for="(item, index) in data" :key="item.id"
  12. :label="item.label" :name="index.toString()">
  13. <!-- 定义不同的切换列表样式 -->
  14. <slot :name="item.label" :index="item.id" />
  15. </el-tab-pane>
  16. </el-tabs>
  17. <div class="xiangyou" @click="rightChange()">
  18. <!-- 右箭头 -->
  19. <i class="el-icon-arrow-right"></i>
  20. </div>
  21. </div>
  22. //props 接收
  23. props: {
  24. data: {
  25. type: Array,
  26. default: () => [],
  27. },
  28. defaultActiveTab: {
  29. type: String,
  30. default: ""
  31. }
  32. },
  33. data() {
  34. return {
  35. activeIndex: "0",
  36. };
  37. },
  38. //methods 切换方法
  39. methods: {
  40. // 导航栏左右箭头切换
  41. leftChange() {
  42. let num = Number(this.activeIndex)
  43. num > 0 && num--
  44. this.activeIndex = num.toString()
  45. },
  46. rightChange() {
  47. let num = Number(this.activeIndex)
  48. num < this.data.length - 1 && num++
  49. this.activeIndex = num.toString()
  50. },
  51. // 切换tab栏方法
  52. handleClick(tab) {
  53. this.activeIndex = tab.name
  54. },
  55. },

2.在父组件中引用并定义具名插槽名字 

  1. // 引入tab组件
  2. import Tabs from './components/Tabs.vue';
  1. <Tabs :data="activeList" :defaultActiveTab="'tab1'" class="tabs">
  2. //#绑定的具名插槽的名字
  3. <template #地名信息>
  4. <div class="info">
  5. <div v-for="item in listTitle" :key="item.id">
  6. <div class="text-container">
  7. <span class="first">{{ item.title }}: </span> <span
  8. class="text">这里是文本内容,当文本内容过长时会自动换行,而不会
  9. 影响到布局。</span>
  10. </div>
  11. </div>
  12. </div>
  13. </template>
  14. <template #配置管理>
  15. <div class="tab-content-2">标签页2的内容</div>
  16. </template>
  17. <template #商品管理>
  18. <div class="tab-content-3">标签页3的内容</div>
  19. </template>
  20. <template #库存管理>
  21. <div class="tab-content-3">标签页4的内容</div>
  22. </template>
  23. </Tabs>

//贴上数据格式

  1. // 导航列表
  2. activeList: [
  3. {
  4. id: 0,
  5. label: '地名信息',
  6. name: 'one'
  7. },
  8. {
  9. id: 1,
  10. label: '配置管理',
  11. name: 'two'
  12. },
  13. {
  14. id: 2,
  15. label: '商品管理',
  16. name: 'there'
  17. },
  18. {
  19. id: 3,
  20. label: '库存管理',
  21. name: 'four'
  22. },],

//附上效果图

续写: 可能测试的时候也是稍微有点问题 大家可以参考我最新补充的

最新修改的

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/581684
推荐阅读
相关标签
  

闽ICP备14008679号