vue组件代码
<template> <div> <el-select v-model="selectedCategory" placeholder="请选择分类" @change="handleCategoryChange"> <el-option v-for="category in flattenCategories" :key="category.id" :label="getCategoryLabel(category)" :value="category.id"></el-option> </el-select> </div> </template> <script> export default { name: 'CategorySelect', props: { value: { type: [String, Number], default: '' }, categories: { type: Array, default: () => [] } }, data() { return { selectedCategory: this.value }; }, computed: { flattenCategories() { return this.flatten(this.categories); } }, watch: { value(newValue) { this.selectedCategory = newValue; }, selectedCategory(newCategory) { this.$emit('input', newCategory); } }, methods: { flatten(categories, prefix = '') { let result = []; for (const category of categories) { const label = prefix + category.name; result.push({ ...category, label }); if (category.children && category.children.length > 0) { result = result.concat(this.flatten(category.children, label + ' / ')); } } return result; }, getCategoryLabel(category) { return category.label.replace(/\//g, ' / '); }, handleCategoryChange() { console.log('Selected category:', this.selectedCategory); } } }; </script>
在需要的页面引入组件:
<template> <div> <category-select v-model="selectedCategory" :categories="categories" @input="handleCategorySelect"></category-select> <p>Selected Category: {{ selectedCategory }}</p> </div> </template> <script> //引入组件 import CategorySelect from './CategorySelect.vue'; export default { components: { CategorySelect }, data() { return { //默认选择的ID selectedCategory: '', categories: [ { "id": 2, "parent_id": 0, "name": "代码", "children": [ { "id": 6, "parent_id": 2, "name": "PHP", "children": [ { "id": 31, "parent_id": 6, "name": "tools" }, { "id": 30, "parent_id": 6, "name": "递归" }, { "id": 8, "parent_id": 6, "name": "算法" }, { "id": 7, "parent_id": 6, "name": "类" } ] } ] }, { "id": 1, "parent_id": 0, "name": "面试题", "children": [ { "id": 5, "parent_id": 1, "name": "css" }, { "id": 4, "parent_id": 1, "name": "Javascript" }, { "id": 3, "parent_id": 1, "name": "PHP" } ] } ] }; }, methods: { //选中操作 handleCategorySelect(category) { this.selectedCategory = category; } } }; </script>
温馨提示:自己可以在组件里面完成分类数据请求,这样直接在其它页面用来显示即可。