有两种触发子菜单的方式

    只需为 Cascader 的属性指定选项数组即可渲染出一个级联选择器。通过props.expandTrigger可以定义展开子级菜单的触发方式。

    禁用选项

    通过在数据源中设置 disabled 字段来声明该选项是禁用的

    Cascader 级联选择器 - 图1

    本例中,options指定的数组中的第一个元素含有disabled: true键值对,因此是禁用的。在默认情况下,Cascader 会检查数据中每一项的disabled字段是否为true,如果你的数据中表示禁用含义的字段名不为disabled,可以通过props.disabled属性来指定(详见下方 API 表格)。当然,valuelabelchildren这三个字段名也可以通过同样的方式指定。

    1. <el-cascader :options="options"></el-cascader>
    2. <script>
    3. export default {
    4. data() {
    5. return {
    6. options: [{
    7. value: 'zhinan',
    8. label: '指南',
    9. disabled: true,
    10. children: [{
    11. value: 'shejiyuanze',
    12. label: '设计原则',
    13. children: [{
    14. value: 'yizhi',
    15. label: '一致'
    16. }, {
    17. value: 'fankui',
    18. label: '反馈'
    19. }, {
    20. value: 'xiaolv',
    21. label: '效率'
    22. }, {
    23. value: 'kekong',
    24. label: '可控'
    25. }]
    26. }, {
    27. value: 'daohang',
    28. label: '导航',
    29. children: [{
    30. value: 'cexiangdaohang',
    31. label: '侧向导航'
    32. }, {
    33. value: 'dingbudaohang',
    34. label: '顶部导航'
    35. }]
    36. }]
    37. }, {
    38. value: 'zujian',
    39. label: '组件',
    40. children: [{
    41. value: 'basic',
    42. label: 'Basic',
    43. children: [{
    44. value: 'layout',
    45. label: 'Layout 布局'
    46. }, {
    47. value: 'color',
    48. label: 'Color 色彩'
    49. }, {
    50. value: 'typography',
    51. label: 'Typography 字体'
    52. }, {
    53. value: 'icon',
    54. label: 'Icon 图标'
    55. }, {
    56. value: 'button',
    57. label: 'Button 按钮'
    58. }]
    59. }, {
    60. value: 'form',
    61. label: 'Form',
    62. children: [{
    63. value: 'radio',
    64. label: 'Radio 单选框'
    65. }, {
    66. value: 'checkbox',
    67. label: 'Checkbox 多选框'
    68. }, {
    69. value: 'input',
    70. label: 'Input 输入框'
    71. }, {
    72. value: 'input-number',
    73. label: 'InputNumber 计数器'
    74. }, {
    75. value: 'select',
    76. label: 'Select 选择器'
    77. }, {
    78. value: 'cascader',
    79. label: 'Cascader 级联选择器'
    80. }, {
    81. value: 'switch',
    82. label: 'Switch 开关'
    83. }, {
    84. value: 'slider',
    85. label: 'Slider 滑块'
    86. }, {
    87. value: 'time-picker',
    88. label: 'TimePicker 时间选择器'
    89. }, {
    90. value: 'date-picker',
    91. label: 'DatePicker 日期选择器'
    92. }, {
    93. value: 'datetime-picker',
    94. label: 'DateTimePicker 日期时间选择器'
    95. }, {
    96. value: 'upload',
    97. label: 'Upload 上传'
    98. }, {
    99. value: 'rate',
    100. label: 'Rate 评分'
    101. }, {
    102. value: 'form',
    103. label: 'Form 表单'
    104. }]
    105. }, {
    106. value: 'data',
    107. label: 'Data',
    108. children: [{
    109. value: 'table',
    110. label: 'Table 表格'
    111. }, {
    112. value: 'tag',
    113. label: 'Tag 标签'
    114. }, {
    115. value: 'progress',
    116. label: 'Progress 进度条'
    117. }, {
    118. value: 'tree',
    119. label: 'Tree 树形控件'
    120. }, {
    121. value: 'pagination',
    122. label: 'Pagination 分页'
    123. }, {
    124. value: 'badge',
    125. label: 'Badge 标记'
    126. }]
    127. }, {
    128. value: 'notice',
    129. label: 'Notice',
    130. children: [{
    131. value: 'alert',
    132. label: 'Alert 警告'
    133. }, {
    134. value: 'loading',
    135. label: 'Loading 加载'
    136. }, {
    137. value: 'message',
    138. label: 'Message 消息提示'
    139. }, {
    140. value: 'message-box',
    141. label: 'MessageBox 弹框'
    142. }, {
    143. value: 'notification',
    144. label: 'Notification 通知'
    145. }]
    146. }, {
    147. value: 'navigation',
    148. label: 'Navigation',
    149. children: [{
    150. value: 'menu',
    151. label: 'NavMenu 导航菜单'
    152. }, {
    153. value: 'tabs',
    154. label: 'Tabs 标签页'
    155. }, {
    156. value: 'breadcrumb',
    157. label: 'Breadcrumb 面包屑'
    158. }, {
    159. value: 'dropdown',
    160. label: 'Dropdown 下拉菜单'
    161. }, {
    162. value: 'steps',
    163. label: 'Steps 步骤条'
    164. }]
    165. }, {
    166. value: 'others',
    167. label: 'Others',
    168. children: [{
    169. value: 'dialog',
    170. label: 'Dialog 对话框'
    171. }, {
    172. value: 'tooltip',
    173. label: 'Tooltip 文字提示'
    174. }, {
    175. value: 'popover',
    176. label: 'Popover 弹出框'
    177. }, {
    178. value: 'card',
    179. label: 'Card 卡片'
    180. }, {
    181. value: 'carousel',
    182. label: 'Carousel 走马灯'
    183. }, {
    184. value: 'collapse',
    185. label: 'Collapse 折叠面板'
    186. }]
    187. }]
    188. }, {
    189. value: 'ziyuan',
    190. label: '资源',
    191. children: [{
    192. value: 'axure',
    193. label: 'Axure Components'
    194. }, {
    195. value: 'sketch',
    196. label: 'Sketch Templates'
    197. }, {
    198. value: 'jiaohu',
    199. label: '组件交互文档'
    200. }]
    201. }]
    202. };
    203. }
    204. };
    205. </script>

    可清空

    通过 clearable 设置输入框可清空

    1. <el-cascader :options="options" clearable></el-cascader>
    2. <script>
    3. export default {
    4. data() {
    5. return {
    6. options: [{
    7. value: 'zhinan',
    8. label: '指南',
    9. children: [{
    10. value: 'shejiyuanze',
    11. label: '设计原则',
    12. children: [{
    13. value: 'yizhi',
    14. label: '一致'
    15. }, {
    16. value: 'fankui',
    17. label: '反馈'
    18. }, {
    19. value: 'xiaolv',
    20. label: '效率'
    21. }, {
    22. value: 'kekong',
    23. label: '可控'
    24. }]
    25. }, {
    26. value: 'daohang',
    27. label: '导航',
    28. children: [{
    29. value: 'cexiangdaohang',
    30. label: '侧向导航'
    31. }, {
    32. value: 'dingbudaohang',
    33. label: '顶部导航'
    34. }]
    35. }]
    36. }, {
    37. value: 'zujian',
    38. label: '组件',
    39. children: [{
    40. value: 'basic',
    41. label: 'Basic',
    42. children: [{
    43. value: 'layout',
    44. label: 'Layout 布局'
    45. }, {
    46. value: 'color',
    47. label: 'Color 色彩'
    48. }, {
    49. value: 'typography',
    50. label: 'Typography 字体'
    51. }, {
    52. value: 'icon',
    53. label: 'Icon 图标'
    54. }, {
    55. value: 'button',
    56. label: 'Button 按钮'
    57. }]
    58. }, {
    59. value: 'form',
    60. label: 'Form',
    61. children: [{
    62. value: 'radio',
    63. label: 'Radio 单选框'
    64. }, {
    65. value: 'checkbox',
    66. label: 'Checkbox 多选框'
    67. }, {
    68. value: 'input',
    69. label: 'Input 输入框'
    70. }, {
    71. value: 'input-number',
    72. label: 'InputNumber 计数器'
    73. }, {
    74. value: 'select',
    75. label: 'Select 选择器'
    76. }, {
    77. value: 'cascader',
    78. label: 'Cascader 级联选择器'
    79. }, {
    80. value: 'switch',
    81. label: 'Switch 开关'
    82. }, {
    83. value: 'slider',
    84. label: 'Slider 滑块'
    85. }, {
    86. value: 'time-picker',
    87. label: 'TimePicker 时间选择器'
    88. }, {
    89. value: 'date-picker',
    90. label: 'DatePicker 日期选择器'
    91. }, {
    92. value: 'datetime-picker',
    93. label: 'DateTimePicker 日期时间选择器'
    94. }, {
    95. value: 'upload',
    96. label: 'Upload 上传'
    97. }, {
    98. value: 'rate',
    99. label: 'Rate 评分'
    100. }, {
    101. value: 'form',
    102. label: 'Form 表单'
    103. }]
    104. }, {
    105. value: 'data',
    106. label: 'Data',
    107. children: [{
    108. value: 'table',
    109. label: 'Table 表格'
    110. }, {
    111. value: 'tag',
    112. label: 'Tag 标签'
    113. }, {
    114. value: 'progress',
    115. label: 'Progress 进度条'
    116. }, {
    117. value: 'tree',
    118. label: 'Tree 树形控件'
    119. }, {
    120. value: 'pagination',
    121. label: 'Pagination 分页'
    122. }, {
    123. value: 'badge',
    124. label: 'Badge 标记'
    125. }]
    126. }, {
    127. value: 'notice',
    128. label: 'Notice',
    129. children: [{
    130. value: 'alert',
    131. label: 'Alert 警告'
    132. }, {
    133. value: 'loading',
    134. label: 'Loading 加载'
    135. }, {
    136. value: 'message',
    137. label: 'Message 消息提示'
    138. }, {
    139. value: 'message-box',
    140. label: 'MessageBox 弹框'
    141. }, {
    142. value: 'notification',
    143. label: 'Notification 通知'
    144. }]
    145. }, {
    146. value: 'navigation',
    147. label: 'Navigation',
    148. children: [{
    149. value: 'menu',
    150. label: 'NavMenu 导航菜单'
    151. }, {
    152. value: 'tabs',
    153. label: 'Tabs 标签页'
    154. }, {
    155. value: 'breadcrumb',
    156. label: 'Breadcrumb 面包屑'
    157. value: 'dropdown',
    158. label: 'Dropdown 下拉菜单'
    159. }, {
    160. value: 'steps',
    161. label: 'Steps 步骤条'
    162. }]
    163. }, {
    164. value: 'others',
    165. label: 'Others',
    166. children: [{
    167. value: 'dialog',
    168. label: 'Dialog 对话框'
    169. }, {
    170. value: 'tooltip',
    171. label: 'Tooltip 文字提示'
    172. value: 'popover',
    173. label: 'Popover 弹出框'
    174. }, {
    175. value: 'card',
    176. label: 'Card 卡片'
    177. }, {
    178. value: 'carousel',
    179. label: 'Carousel 走马灯'
    180. }, {
    181. value: 'collapse',
    182. label: 'Collapse 折叠面板'
    183. }]
    184. }]
    185. }, {
    186. value: 'ziyuan',
    187. label: '资源',
    188. children: [{
    189. value: 'axure',
    190. label: 'Axure Components'
    191. }, {
    192. value: 'sketch',
    193. label: 'Sketch Templates'
    194. }, {
    195. value: 'jiaohu',
    196. label: '组件交互文档'
    197. }]
    198. }]
    199. }
    200. }
    201. }
    202. </script>

    仅显示最后一级

    可以仅在输入框中显示选中项最后一级的标签,而不是选中项所在的完整路径。

    属性show-all-levels定义了是否显示完整的路径,将其赋值为false则仅显示最后一级

    多选

    可通过 props.multiple = true 来开启多选模式

    Cascader 级联选择器 - 图2

    在开启多选模式后,默认情况下会展示所有已选中的选项的Tag,你可以使用collapse-tags来折叠Tag

    1. <div class="block">
    2. <span class="demonstration">默认显示所有Tag</span>
    3. <el-cascader
    4. :options="options"
    5. :props="props"
    6. clearable></el-cascader>
    7. </div>
    8. <div class="block">
    9. <span class="demonstration">折叠展示Tag</span>
    10. <el-cascader
    11. :options="options"
    12. :props="props"
    13. collapse-tags
    14. clearable></el-cascader>
    15. </div>
    16. <script>
    17. export default {
    18. data() {
    19. return {
    20. props: { multiple: true },
    21. options: [{
    22. value: 1,
    23. label: '东南',
    24. children: [{
    25. value: 2,
    26. label: '上海',
    27. children: [
    28. { value: 3, label: '普陀' },
    29. { value: 4, label: '黄埔' },
    30. { value: 5, label: '徐汇' }
    31. ]
    32. }, {
    33. value: 7,
    34. label: '江苏',
    35. children: [
    36. { value: 8, label: '南京' },
    37. { value: 9, label: '苏州' },
    38. { value: 10, label: '无锡' }
    39. ]
    40. }, {
    41. value: 12,
    42. label: '浙江',
    43. children: [
    44. { value: 13, label: '杭州' },
    45. { value: 14, label: '宁波' },
    46. { value: 15, label: '嘉兴' }
    47. ]
    48. }]
    49. }, {
    50. value: 17,
    51. label: '西北',
    52. children: [{
    53. value: 18,
    54. label: '陕西',
    55. children: [
    56. { value: 19, label: '西安' },
    57. { value: 20, label: '延安' }
    58. ]
    59. }, {
    60. value: 21,
    61. label: '新疆维吾尔族自治区',
    62. children: [
    63. { value: 22, label: '乌鲁木齐' },
    64. { value: 23, label: '克拉玛依' }
    65. ]
    66. }]
    67. }]
    68. };
    69. }
    70. };
    71. </script>

    选择任意一级选项

    在单选模式下,你只能选择叶子节点;而在多选模式下,勾选父节点真正选中的都是叶子节点。启用该功能后,可让父子节点取消关联,选择任意一级选项。

    可通过 props.checkStrictly = true 来设置父子节点取消选中关联,从而达到选择任意一级选项的目的。

    1. <div class="block">
    2. <span class="demonstration">单选选择任意一级选项</span>
    3. <el-cascader
    4. :options="options"
    5. :props="{ checkStrictly: true }"
    6. clearable></el-cascader>
    7. </div>
    8. <div class="block">
    9. <span class="demonstration">多选选择任意一级选项</span>
    10. <el-cascader
    11. :options="options"
    12. :props="{ multiple: true, checkStrictly: true }"
    13. clearable></el-cascader>
    14. </div>
    15. <script>
    16. export default {
    17. data() {
    18. return {
    19. options: [{
    20. value: 'zhinan',
    21. label: '指南',
    22. children: [{
    23. value: 'shejiyuanze',
    24. label: '设计原则',
    25. children: [{
    26. value: 'yizhi',
    27. label: '一致'
    28. }, {
    29. value: 'fankui',
    30. label: '反馈'
    31. }, {
    32. value: 'xiaolv',
    33. label: '效率'
    34. }, {
    35. value: 'kekong',
    36. label: '可控'
    37. }]
    38. }, {
    39. value: 'daohang',
    40. label: '导航',
    41. children: [{
    42. value: 'cexiangdaohang',
    43. label: '侧向导航'
    44. }, {
    45. value: 'dingbudaohang',
    46. label: '顶部导航'
    47. }]
    48. }]
    49. }, {
    50. value: 'zujian',
    51. label: '组件',
    52. children: [{
    53. value: 'basic',
    54. label: 'Basic',
    55. children: [{
    56. value: 'layout',
    57. label: 'Layout 布局'
    58. }, {
    59. value: 'color',
    60. label: 'Color 色彩'
    61. }, {
    62. value: 'typography',
    63. label: 'Typography 字体'
    64. }, {
    65. value: 'icon',
    66. label: 'Icon 图标'
    67. }, {
    68. value: 'button',
    69. label: 'Button 按钮'
    70. }]
    71. }, {
    72. value: 'form',
    73. label: 'Form',
    74. children: [{
    75. value: 'radio',
    76. label: 'Radio 单选框'
    77. }, {
    78. value: 'checkbox',
    79. label: 'Checkbox 多选框'
    80. }, {
    81. value: 'input',
    82. label: 'Input 输入框'
    83. }, {
    84. value: 'input-number',
    85. label: 'InputNumber 计数器'
    86. }, {
    87. value: 'select',
    88. label: 'Select 选择器'
    89. }, {
    90. value: 'cascader',
    91. label: 'Cascader 级联选择器'
    92. }, {
    93. value: 'switch',
    94. label: 'Switch 开关'
    95. }, {
    96. value: 'slider',
    97. label: 'Slider 滑块'
    98. }, {
    99. value: 'time-picker',
    100. label: 'TimePicker 时间选择器'
    101. }, {
    102. value: 'date-picker',
    103. label: 'DatePicker 日期选择器'
    104. }, {
    105. value: 'datetime-picker',
    106. label: 'DateTimePicker 日期时间选择器'
    107. }, {
    108. value: 'upload',
    109. label: 'Upload 上传'
    110. }, {
    111. value: 'rate',
    112. label: 'Rate 评分'
    113. }, {
    114. value: 'form',
    115. label: 'Form 表单'
    116. }]
    117. }, {
    118. value: 'data',
    119. label: 'Data',
    120. children: [{
    121. value: 'table',
    122. label: 'Table 表格'
    123. }, {
    124. value: 'tag',
    125. label: 'Tag 标签'
    126. }, {
    127. value: 'progress',
    128. label: 'Progress 进度条'
    129. }, {
    130. value: 'tree',
    131. label: 'Tree 树形控件'
    132. }, {
    133. value: 'pagination',
    134. label: 'Pagination 分页'
    135. }, {
    136. value: 'badge',
    137. label: 'Badge 标记'
    138. }]
    139. }, {
    140. value: 'notice',
    141. label: 'Notice',
    142. children: [{
    143. value: 'alert',
    144. label: 'Alert 警告'
    145. }, {
    146. value: 'loading',
    147. label: 'Loading 加载'
    148. }, {
    149. value: 'message',
    150. label: 'Message 消息提示'
    151. }, {
    152. value: 'message-box',
    153. label: 'MessageBox 弹框'
    154. }, {
    155. value: 'notification',
    156. label: 'Notification 通知'
    157. }]
    158. }, {
    159. value: 'navigation',
    160. label: 'Navigation',
    161. children: [{
    162. value: 'menu',
    163. label: 'NavMenu 导航菜单'
    164. }, {
    165. value: 'tabs',
    166. label: 'Tabs 标签页'
    167. }, {
    168. value: 'breadcrumb',
    169. label: 'Breadcrumb 面包屑'
    170. }, {
    171. value: 'dropdown',
    172. label: 'Dropdown 下拉菜单'
    173. }, {
    174. value: 'steps',
    175. label: 'Steps 步骤条'
    176. }]
    177. }, {
    178. value: 'others',
    179. label: 'Others',
    180. children: [{
    181. value: 'dialog',
    182. label: 'Dialog 对话框'
    183. }, {
    184. value: 'tooltip',
    185. label: 'Tooltip 文字提示'
    186. }, {
    187. value: 'popover',
    188. label: 'Popover 弹出框'
    189. }, {
    190. value: 'card',
    191. label: 'Card 卡片'
    192. }, {
    193. value: 'carousel',
    194. label: 'Carousel 走马灯'
    195. }, {
    196. value: 'collapse',
    197. label: 'Collapse 折叠面板'
    198. }]
    199. }]
    200. }, {
    201. value: 'ziyuan',
    202. label: '资源',
    203. children: [{
    204. value: 'axure',
    205. label: 'Axure Components'
    206. }, {
    207. value: 'sketch',
    208. label: 'Sketch Templates'
    209. }, {
    210. value: 'jiaohu',
    211. label: '组件交互文档'
    212. }]
    213. }]
    214. };
    215. }
    216. };
    217. </script>

    当选中某一级时,动态加载该级下的选项。

    Cascader 级联选择器 - 图3

    可搜索

    可以快捷地搜索选项并选择。

    filterable赋值为true即可打开搜索功能,默认会匹配节点的label或所有父节点的label(由show-all-levels决定)中包含输入值的选项。你也可以用filter-method自定义搜索逻辑,接受一个函数,第一个参数是节点node,第二个参数是搜索关键词keyword,通过返回布尔值表示是否命中。

    1. <div class="block">
    2. <span class="demonstration">单选可搜索</span>
    3. <el-cascader
    4. placeholder="试试搜索:指南"
    5. :options="options"
    6. filterable></el-cascader>
    7. </div>
    8. <div class="block">
    9. <span class="demonstration">多选可搜索</span>
    10. <el-cascader
    11. placeholder="试试搜索:指南"
    12. :options="options"
    13. :props="{ multiple: true }"
    14. filterable></el-cascader>
    15. </div>
    16. <script>
    17. export default {
    18. data() {
    19. return {
    20. options: [{
    21. value: 'zhinan',
    22. label: '指南',
    23. children: [{
    24. value: 'shejiyuanze',
    25. label: '设计原则',
    26. children: [{
    27. value: 'yizhi',
    28. label: '一致'
    29. }, {
    30. value: 'fankui',
    31. label: '反馈'
    32. }, {
    33. value: 'xiaolv',
    34. label: '效率'
    35. }, {
    36. value: 'kekong',
    37. label: '可控'
    38. }]
    39. }, {
    40. value: 'daohang',
    41. label: '导航',
    42. children: [{
    43. value: 'cexiangdaohang',
    44. label: '侧向导航'
    45. value: 'dingbudaohang',
    46. label: '顶部导航'
    47. }]
    48. }]
    49. value: 'zujian',
    50. label: '组件',
    51. children: [{
    52. value: 'basic',
    53. label: 'Basic',
    54. children: [{
    55. value: 'layout',
    56. label: 'Layout 布局'
    57. }, {
    58. value: 'color',
    59. label: 'Color 色彩'
    60. }, {
    61. value: 'typography',
    62. label: 'Typography 字体'
    63. }, {
    64. value: 'icon',
    65. label: 'Icon 图标'
    66. }, {
    67. value: 'button',
    68. label: 'Button 按钮'
    69. }]
    70. }, {
    71. value: 'form',
    72. label: 'Form',
    73. children: [{
    74. value: 'radio',
    75. label: 'Radio 单选框'
    76. }, {
    77. value: 'checkbox',
    78. label: 'Checkbox 多选框'
    79. }, {
    80. value: 'input',
    81. label: 'Input 输入框'
    82. }, {
    83. value: 'input-number',
    84. label: 'InputNumber 计数器'
    85. }, {
    86. value: 'select',
    87. label: 'Select 选择器'
    88. }, {
    89. value: 'cascader',
    90. label: 'Cascader 级联选择器'
    91. }, {
    92. value: 'switch',
    93. label: 'Switch 开关'
    94. }, {
    95. value: 'slider',
    96. label: 'Slider 滑块'
    97. }, {
    98. value: 'time-picker',
    99. label: 'TimePicker 时间选择器'
    100. }, {
    101. value: 'date-picker',
    102. label: 'DatePicker 日期选择器'
    103. }, {
    104. value: 'datetime-picker',
    105. label: 'DateTimePicker 日期时间选择器'
    106. }, {
    107. value: 'upload',
    108. label: 'Upload 上传'
    109. }, {
    110. value: 'rate',
    111. label: 'Rate 评分'
    112. }, {
    113. value: 'form',
    114. label: 'Form 表单'
    115. }]
    116. }, {
    117. value: 'data',
    118. label: 'Data',
    119. children: [{
    120. value: 'table',
    121. label: 'Table 表格'
    122. }, {
    123. value: 'tag',
    124. label: 'Tag 标签'
    125. }, {
    126. value: 'progress',
    127. label: 'Progress 进度条'
    128. }, {
    129. value: 'tree',
    130. label: 'Tree 树形控件'
    131. }, {
    132. value: 'pagination',
    133. label: 'Pagination 分页'
    134. }, {
    135. value: 'badge',
    136. label: 'Badge 标记'
    137. }]
    138. }, {
    139. value: 'notice',
    140. label: 'Notice',
    141. children: [{
    142. value: 'alert',
    143. label: 'Alert 警告'
    144. }, {
    145. value: 'loading',
    146. label: 'Loading 加载'
    147. }, {
    148. value: 'message',
    149. label: 'Message 消息提示'
    150. }, {
    151. value: 'message-box',
    152. label: 'MessageBox 弹框'
    153. }, {
    154. value: 'notification',
    155. label: 'Notification 通知'
    156. }]
    157. }, {
    158. value: 'navigation',
    159. label: 'Navigation',
    160. children: [{
    161. value: 'menu',
    162. label: 'NavMenu 导航菜单'
    163. }, {
    164. value: 'tabs',
    165. label: 'Tabs 标签页'
    166. }, {
    167. value: 'breadcrumb',
    168. label: 'Breadcrumb 面包屑'
    169. }, {
    170. value: 'dropdown',
    171. label: 'Dropdown 下拉菜单'
    172. }, {
    173. value: 'steps',
    174. label: 'Steps 步骤条'
    175. }]
    176. }, {
    177. value: 'others',
    178. label: 'Others',
    179. children: [{
    180. value: 'dialog',
    181. label: 'Dialog 对话框'
    182. }, {
    183. value: 'tooltip',
    184. label: 'Tooltip 文字提示'
    185. }, {
    186. value: 'popover',
    187. label: 'Popover 弹出框'
    188. }, {
    189. value: 'card',
    190. label: 'Card 卡片'
    191. }, {
    192. value: 'carousel',
    193. label: 'Carousel 走马灯'
    194. }, {
    195. value: 'collapse',
    196. label: 'Collapse 折叠面板'
    197. }]
    198. }]
    199. }, {
    200. value: 'ziyuan',
    201. label: '资源',
    202. children: [{
    203. value: 'axure',
    204. label: 'Axure Components'
    205. }, {
    206. value: 'sketch',
    207. label: 'Sketch Templates'
    208. }, {
    209. value: 'jiaohu',
    210. label: '组件交互文档'
    211. }]
    212. }]
    213. };
    214. }
    215. };
    216. </script>

    自定义节点内容

    可以自定义备选项的节点内容

    Cascader 级联选择器 - 图4

    可以通过scoped slot对级联选择器的备选项的节点内容进行自定义,scoped slot会传入两个字段 nodedata,分别表示当前节点的 Node 对象和数据。

    1. <el-cascader :options="options">
    2. <template slot-scope="{ node, data }">
    3. <span>{{ data.label }}</span>
    4. <span v-if="!node.isLeaf"> ({{ data.children.length }}) </span>
    5. </template>
    6. </el-cascader>
    7. <script>
    8. export default {
    9. data() {
    10. return {
    11. options: [{
    12. value: 'zhinan',
    13. label: '指南',
    14. children: [{
    15. value: 'shejiyuanze',
    16. label: '设计原则',
    17. children: [{
    18. value: 'yizhi',
    19. label: '一致'
    20. }, {
    21. value: 'fankui',
    22. label: '反馈'
    23. }, {
    24. value: 'xiaolv',
    25. label: '效率'
    26. }, {
    27. value: 'kekong',
    28. label: '可控'
    29. }]
    30. }, {
    31. value: 'daohang',
    32. label: '导航',
    33. children: [{
    34. value: 'cexiangdaohang',
    35. label: '侧向导航'
    36. }, {
    37. value: 'dingbudaohang',
    38. label: '顶部导航'
    39. }]
    40. }]
    41. }, {
    42. value: 'zujian',
    43. label: '组件',
    44. children: [{
    45. value: 'basic',
    46. label: 'Basic',
    47. children: [{
    48. value: 'layout',
    49. label: 'Layout 布局'
    50. }, {
    51. value: 'color',
    52. label: 'Color 色彩'
    53. }, {
    54. value: 'typography',
    55. label: 'Typography 字体'
    56. }, {
    57. value: 'icon',
    58. label: 'Icon 图标'
    59. }, {
    60. value: 'button',
    61. label: 'Button 按钮'
    62. }]
    63. }, {
    64. value: 'form',
    65. label: 'Form',
    66. children: [{
    67. value: 'radio',
    68. label: 'Radio 单选框'
    69. }, {
    70. value: 'checkbox',
    71. label: 'Checkbox 多选框'
    72. }, {
    73. value: 'input',
    74. label: 'Input 输入框'
    75. }, {
    76. value: 'input-number',
    77. label: 'InputNumber 计数器'
    78. }, {
    79. value: 'select',
    80. label: 'Select 选择器'
    81. }, {
    82. value: 'cascader',
    83. label: 'Cascader 级联选择器'
    84. }, {
    85. value: 'switch',
    86. label: 'Switch 开关'
    87. }, {
    88. value: 'slider',
    89. label: 'Slider 滑块'
    90. }, {
    91. value: 'time-picker',
    92. label: 'TimePicker 时间选择器'
    93. }, {
    94. value: 'date-picker',
    95. label: 'DatePicker 日期选择器'
    96. }, {
    97. value: 'datetime-picker',
    98. label: 'DateTimePicker 日期时间选择器'
    99. }, {
    100. value: 'upload',
    101. label: 'Upload 上传'
    102. }, {
    103. value: 'rate',
    104. label: 'Rate 评分'
    105. }, {
    106. value: 'form',
    107. label: 'Form 表单'
    108. }]
    109. }, {
    110. value: 'data',
    111. label: 'Data',
    112. children: [{
    113. value: 'table',
    114. label: 'Table 表格'
    115. }, {
    116. value: 'tag',
    117. label: 'Tag 标签'
    118. }, {
    119. value: 'progress',
    120. label: 'Progress 进度条'
    121. }, {
    122. value: 'tree',
    123. label: 'Tree 树形控件'
    124. }, {
    125. value: 'pagination',
    126. label: 'Pagination 分页'
    127. }, {
    128. value: 'badge',
    129. label: 'Badge 标记'
    130. }]
    131. }, {
    132. value: 'notice',
    133. label: 'Notice',
    134. children: [{
    135. value: 'alert',
    136. label: 'Alert 警告'
    137. }, {
    138. value: 'loading',
    139. label: 'Loading 加载'
    140. }, {
    141. value: 'message',
    142. label: 'Message 消息提示'
    143. }, {
    144. value: 'message-box',
    145. label: 'MessageBox 弹框'
    146. }, {
    147. value: 'notification',
    148. label: 'Notification 通知'
    149. }]
    150. }, {
    151. value: 'navigation',
    152. label: 'Navigation',
    153. children: [{
    154. value: 'menu',
    155. label: 'NavMenu 导航菜单'
    156. }, {
    157. value: 'tabs',
    158. label: 'Tabs 标签页'
    159. }, {
    160. value: 'breadcrumb',
    161. label: 'Breadcrumb 面包屑'
    162. }, {
    163. value: 'dropdown',
    164. label: 'Dropdown 下拉菜单'
    165. }, {
    166. value: 'steps',
    167. label: 'Steps 步骤条'
    168. }]
    169. }, {
    170. value: 'others',
    171. label: 'Others',
    172. children: [{
    173. value: 'dialog',
    174. label: 'Dialog 对话框'
    175. }, {
    176. value: 'tooltip',
    177. label: 'Tooltip 文字提示'
    178. }, {
    179. value: 'popover',
    180. label: 'Popover 弹出框'
    181. }, {
    182. value: 'card',
    183. label: 'Card 卡片'
    184. }, {
    185. value: 'carousel',
    186. label: 'Carousel 走马灯'
    187. }, {
    188. value: 'collapse',
    189. label: 'Collapse 折叠面板'
    190. }]
    191. }]
    192. }, {
    193. value: 'ziyuan',
    194. label: '资源',
    195. children: [{
    196. value: 'axure',
    197. label: 'Axure Components'
    198. }, {
    199. value: 'sketch',
    200. label: 'Sketch Templates'
    201. }, {
    202. value: 'jiaohu',
    203. label: '组件交互文档'
    204. }]
    205. }]
    206. }
    207. }
    208. }

    级联面板

    级联面板是级联选择器的核心组件,与级联选择器一样,有单选、多选、动态加载等多种功能。

    和级联选择器一样,通过options来指定选项,也可通过props来设置多选、动态加载等功能,具体详情见下方API表格。

    Cascader Attributes

    Cascader Events

    事件名称说明回调参数
    change当选中节点变化时触发选中节点的值
    expand-change当展开节点发生变化时触发各父级选项值组成的数组
    blur当失去焦点时触发(event: Event)
    focus当获得焦点时触发(event: Event)
    visible-change下拉框出现/隐藏时触发出现则为 true,隐藏则为 false
    remove-tag在多选模式下,移除Tag时触发移除的Tag对应的节点的值
    方法名说明参数
    getCheckedNodes获取选中的节点(leafOnly) 是否只是叶子节点,默认值为 false

    Cascader Slots

    CascaderPanel Attributes

    参数说明类型可选值默认值
    value / v-model选中项绑定值-
    options可选项数据源,键名可通过 Props 属性配置array
    props配置选项,具体见下表object

    CascaderPanel Events

    事件名称说明回调参数
    change当选中节点变化时触发选中节点的值
    expand-change当展开节点发生变化时触发各父级选项值组成的数组

    CascaderPanel Methods

    CascaderPanel Slots

    名称说明
    -自定义备选项的节点内容,参数为 { node, data },分别为当前节点的 Node 对象和数据
    参数说明类型可选值默认值
    expandTrigger次级菜单的展开方式stringclick / hover‘click’
    multiple是否多选boolean-false
    checkStrictly是否严格的遵守父子节点不互相关联boolean-false
    emitPath在选中节点改变时,是否返回由该节点所在的各级菜单的值所组成的数组,若设置 false,则只返回该节点的值boolean-true
    lazy是否动态加载子节点,需与 lazyLoad 方法结合使用boolean-false
    lazyLoad加载动态数据的方法,仅在 lazy 为 true 时有效function(node, resolve),node为当前点击的节点,resolve为数据加载完成的回调(必须调用)--
    value指定选项的值为选项对象的某个属性值string‘value’
    label指定选项标签为选项对象的某个属性值string‘label’
    children指定选项的子选项为选项对象的某个属性值string‘children’
    disabled指定选项的禁用为选项对象的某个属性值string‘disabled’
    leaf指定选项的叶子节点的标志位为选项对象的某个属性值string‘leaf’