最近使用element-ui 的Casecader 級聯對象時,後臺要求將對象的label值也傳過去,然而,element-ui 官方並無提供這樣方(keng)便 ( die ) 的方法。css
一時間直是一籌莫展... html
無奈只能經過遍歷樹來一一獲取了:vue
getCascaderObj = function(val, opt){ return val.map(function (value, index, array) { for (var itm of opt) { if (itm.value == value) { opt = itm.children; return itm; } } return null; }); }
完整事例:element-ui
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-default/index.css"> <style> </style> </head> <body> <div id="app"> <el-cascader v-model="val" placeholder="試試搜索:指南" :options="options" filterable @change="handleItemChange"></el-cascader> <div v-for="i in vals"> label:{{i.label}} - value{{i.value}} </div> </div> <script src="https://unpkg.com/vue/dist/vue.js"></script> <script src="https://unpkg.com/element-ui/lib/index.js"></script> <script> function getCascaderObj(val,opt) { return val.map(function (value, index, array) { for (var itm of opt) { if (itm.value == value) { opt = itm.children; return itm; } } return null; }); } </script> <script> var app = new Vue({ el: '#app', data: { vals:[], val: [], options: [{ value: 'zhinan', label: '指南', children: [{ value: 'shejiyuanze', label: '設計原則', children: [{ value: 'yizhi', label: '一致' }, { value: 'fankui', label: '反饋' }, { value: 'xiaolv', label: '效率' }, { value: 'kekong', label: '可控' }] }, { value: 'daohang', label: '導航', children: [{ value: 'cexiangdaohang', label: '側向導航' }, { value: 'dingbudaohang', label: '頂部導航' }] }] }, { value: 'zujian', label: '組件', children: [{ value: 'basic', label: 'Basic', children: [{ value: 'layout', label: 'Layout 佈局' }, { value: 'color', label: 'Color 色彩' }, { value: 'typography', label: 'Typography 字體' }, { value: 'icon', label: 'Icon 圖標' }, { value: 'button', label: 'Button 按鈕' }] }, { value: 'form', label: 'Form', children: [{ value: 'radio', label: 'Radio 單選框' }, { value: 'checkbox', label: 'Checkbox 多選框' }, { value: 'input', label: 'Input 輸入框' }, { value: 'input-number', label: 'InputNumber 計數器' }, { value: 'select', label: 'Select 選擇器' }, { value: 'cascader', label: 'Cascader 級聯選擇器' }, { value: 'switch', label: 'Switch 開關' }, { value: 'slider', label: 'Slider 滑塊' }, { value: 'time-picker', label: 'TimePicker 時間選擇器' }, { value: 'date-picker', label: 'DatePicker 日期選擇器' }, { value: 'datetime-picker', label: 'DateTimePicker 日期時間選擇器' }, { value: 'upload', label: 'Upload 上傳' }, { value: 'rate', label: 'Rate 評分' }, { value: 'form', label: 'Form 表單' }] }, { value: 'data', label: 'Data', children: [{ value: 'table', label: 'Table 表格' }, { value: 'tag', label: 'Tag 標籤' }, { value: 'progress', label: 'Progress 進度條' }, { value: 'tree', label: 'Tree 樹形控件' }, { value: 'pagination', label: 'Pagination 分頁' }, { value: 'badge', label: 'Badge 標記' }] }, { value: 'notice', label: 'Notice', children: [{ value: 'alert', label: 'Alert 警告' }, { value: 'loading', label: 'Loading 加載' }, { value: 'message', label: 'Message 消息提示' }, { value: 'message-box', label: 'MessageBox 彈框' }, { value: 'notification', label: 'Notification 通知' }] }, { value: 'navigation', label: 'Navigation', children: [{ value: 'menu', label: 'NavMenu 導航菜單' }, { value: 'tabs', label: 'Tabs 標籤頁' }, { value: 'breadcrumb', label: 'Breadcrumb 麪包屑' }, { value: 'dropdown', label: 'Dropdown 下拉菜單' }, { value: 'steps', label: 'Steps 步驟條' }] }, { value: 'others', label: 'Others', children: [{ value: 'dialog', label: 'Dialog 對話框' }, { value: 'tooltip', label: 'Tooltip 文字提示' }, { value: 'popover', label: 'Popover 彈出框' }, { value: 'card', label: 'Card 卡片' }, { value: 'carousel', label: 'Carousel 走馬燈' }, { value: 'collapse', label: 'Collapse 摺疊面板' }] }] }, { value: 'ziyuan', label: '資源', children: [{ value: 'axure', label: 'Axure Components' }, { value: 'sketch', label: 'Sketch Templates' }, { value: 'jiaohu', label: '組件交互文檔' }] }] }, methods: { handleItemChange() { this.vals=getCascaderObj(this.val, this.options); } } }) </script> </body> </html>
以上獲取到的將會是一個數組,可根據數組來獲取其中的label數組
做者:關愛單身狗成長協會
連接:https://www.jianshu.com/p/b3e40837ec1d
來源:簡書
著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。app