IndexList

索引列表,提供了列表索引的功能,也是一个基于better-scroll进行封装的组件。

示例

  • 基本使用

构造如示例中 cityData 这样结构的数据,传入 cube-index-list 组件的 data 属性。

  1. <cube-index-list :data="cityData" :title="title" @select="selectItem" @title-click="clickTitle"></cube-index-list>
  1. const cityData = [
  2. {
  3. "name": "★Hot City",
  4. "items": [
  5. {
  6. "name": "BEIJING",
  7. "value": 1
  8. },
  9. {
  10. "name": "SHANGHAI",
  11. "value": 2
  12. }
  13. ]
  14. },
  15. {
  16. "name": "A",
  17. "items": [
  18. {
  19. "name": "ANSHAN",
  20. "value": 3
  21. },
  22. {
  23. "name": "ANQING",
  24. "value": 4
  25. }
  26. ]
  27. }
  28. ]
  29.  
  30. export default {
  31. data() {
  32. return {
  33. title: 'Current City: BEIJING',
  34. cityData: cityData
  35. }
  36. },
  37. methods: {
  38. selectItem(item) {
  39. console.log(item.name)
  40. },
  41. clickTitle(title) {
  42. console.log(title)
  43. }
  44. }
  45. }
  • 自定义插槽

除了默认结构,你还可以根据自己的需要自定义每一项的内容。如下所示,将你的自定义内容项填入cube-index-list-item的插槽。除非你真的知道自己在做什么,否则不要修改cube-index-list-group和cube-index-list-item的用法。

  1. <cube-index-list :data="cityData">
  2. <cube-index-list-group v-for="(group, index) in cityData" :key="index" :group="group">
  3. <cube-index-list-item v-for="(item, index) in group.items" :key="index" :item="item" @select="selectItem">
  4. <div class="custom-item">我是自定义 {{item.name}}</div>
  5. </cube-index-list-item>
  6. </cube-index-list-group>
  7. </cube-index-list>
  1. export default {
  2. data() {
  3. return {
  4. cityData: cityData
  5. }
  6. },
  7. methods: {
  8. selectItem(item) {
  9. console.log(item.name)
  10. },
  11. clickTitle(title) {
  12. console.log(title)
  13. }
  14. }
  15. }
  16.  
  17.  
  18. // 自定义项的样式
  19. .custom-item
  20. position: relative
  21. height: 70px
  22. line-height: 70px
  23. padding: 0 16px
  24. font-size: - fontsize-medium
  25.  
  26. // 用自定义样式,覆写内置的默认样式
  27. .cube-index-list-content
  28. background-color: #222
  29. color: #909090
  30. .cube-index-list-anchor
  31. background-color: #333
  32. height: 30px
  33. line-height: 30px
  34. padding: 0 0 0 20px
  35. .cube-index-list-nav
  36. padding: 20px 0
  37. border-radius: 10px
  38. background: rgba(0,0,0,.3)
  39. >ul
  40. >li
  41. padding: 3px
  42. font-size: 12px
  43. color: #909090
  44. &.active
  45. color: #ffcd32
  • 上拉加载

可以通过 pullUpLoad 属性开启上拉加载功能,具体配置同 Scroll 组件的 options.pullUpLoad。

  1. <cube-index-list ref="indexList" :data="data" :title="title" :pullupload="true" @select="selectItem" @title-click="clickTitle" @pulling-up="onPullingUp">
  2. </cube-index-list>
  1. export default {
  2. data() {
  3. return {
  4. title: 'Current City: BEIJING',
  5. data: cityData.slice(0, 4)
  6. }
  7. },
  8. methods: {
  9. selectItem(item) {
  10. console.log(item.name)
  11. },
  12. clickTitle(title) {
  13. console.log(title)
  14. },
  15. onPullingUp() {
  16. // Mock async load.
  17. setTimeout(() => {
  18. const length = this.data.length
  19. if (length < cityData.length) {
  20. // Update data.
  21. this.data.push(cityData[length])
  22. }
  23. // Call forceUpdate after finishing data load.
  24. this.- refs.indexList.forceUpdate()
  25. }, 1000)
  26. }
  27. }
  28. }
  • 下拉刷新
    可以通过 pullDownRefresh 属性开启下拉刷新功能,具体配置同 Scroll 组件的 options.pullDownRefresh。
    1. <cube-index-list ref="indexList" :data="data" :title="title" :pulldownrefresh="pullDownRefresh" @select="selectItem" @title-click="clickTitle" @pulling-down="onPullingDown">
    2. </cube-index-list>
    1. export default {
    2. data() {
    3. return {
    4. title: 'Current City: BEIJING',
    5. data: cityData,
    6. pullDownRefresh: {
    7. stop: 55
    8. }
    9. }
    10. },
    11. methods: {
    12. selectItem(item) {
    13. console.log(item.name)
    14. },
    15. clickTitle(title) {
    16. console.log(title)
    17. },
    18. onPullingDown() {
    19. // Mock async load.
    20. setTimeout(() => {
    21. // Update data.
    22. this.data[1].items.push(...cityData[1].items)
    23. // Call forceUpdate after finishing data load.
    24. this.- refs.indexList.forceUpdate()
    25. }, 1000)
    26. }
    27. }
    28. }

Props 配置

参数 说明 类型 默认值
title 标题 String -
data 需要展示的数据 Array []
navbar 是否需要导航栏 Boolean true
speed 点击导航栏索引时,滚动到相应位置的动画时间(单位:ms) number 0
options1.9.8+ better-scroll 配置项,具体请参考BS 官方文档 Object { observeDOM: true, click: true, probeType: 1, scrollbar: false, pullDownRefresh: false, pullUpLoad: false}
pullUpLoad1.8.0+ 上拉加载,具体配置参考 scroll 组件的 options.pullUpLoad即将废弃,推荐使用 options 属性 Boolean/Object false
pullDownRefresh1.8.0+ 下拉刷新,具体配置参考 scroll 组件的 options.pullDownRefresh即将废弃,推荐使用 options 属性 Boolean/Object false
  • data 子配置项
    data 是数组,表示的是一组数据,每一项配置:
参数 说明 类型
name 组名 String
items 当前组下的数据项 Array

items 数组中的每一项必须是对象,且包含 name 属性用于显示内容;例如 items: [{name: 'xx', …}, …]

插槽

名字 说明 作用域参数
pulldown1.9.4+ 位于列表上方,会在下拉刷新时显示,与 scroll 组件相同 具体参考 scroll 组件的 pulldown 插槽作用域参数介绍
pullup1.9.4+ 位于列表下方,会在上拉加载时显示,与 scroll 组件相同 具体参考 scroll 组件的 pullup 插槽作用域参数介绍

事件

事件名 说明 参数
select 点击 IndexList 的某一项后触发 该选项的数据
title-click 点击 title 后触发(title 必须设置后才有效) title属性值
pulling-up1.8.0+ 当 pullUpLoad 属性为 true 时,在上拉超过阈值时触发 -
pulling-down1.8.0+ 当 pullDownRefresh 属性为 true 时,在下拉超过阈值时触发 -

原文:

https://didi.github.io/cube-ui/#/zh-CN/docs/index-list