1. 程式人生 > 實用技巧 >選擇器標籤聯動元件

選擇器標籤聯動元件

程式碼地址:https://github.com/littleOneYuan/select-tag-Component

詳情:通過選擇器選擇可以在下方區域用對應的標籤進行展示,重複選擇相同標籤即為刪除

框架:element-ui

HTML 程式碼

 1 <template>
 2   <div class="drawerContainer">
 3     <el-form
 4       ref="drawerForm"
 5       :model="drawerForm"
 6       :rules="rules"
 7     >
 8       <
el-form-item prop="gameIds"> 9 <span>子游戲名:</span> 10 <el-select 11 v-model="drawerForm.gameIds" 12 multiple // 可多選 13 collapse-tags // 帶標籤 14 filterable // 可搜尋 15 clearable // 可清空 16 @clear="clearDo" // 清空事件 17 @change
="chooseGame" // 選項改變事件 18 placeholder="請選擇" 19 > 20 <el-option 21 v-for="item in belongDeptOptions" 22 :key="item.gameId" 23 :label="item.gameName" 24 :value="item.gameId" 25 > 26 </el-option>
27 </el-select> 28 </el-form-item> 29 </el-form> 30 <el-tag 31 v-for="tag in tags" 32 :key="tag.gameName" 33 size="medium" 34 effect="plain" 35 closable 36 :disable-transitions="false" 37 @close="tagClose(tag)" // 標籤關閉事件 38 > 39 {{tag.gameName}} 40 </el-tag> 41 </div> 42 </template>

Script 程式碼

 1 <script>
 2 export default {
 3   data () {
 4     return {
 5       drawerForm: {
 6         gameIds: []
 7       },
 8       tags: [],
 9       belongDeptOptions: [{ // 所屬部門
10         gameId: '...',
11         gameName: '..'
12       },...]
13     }
14   },
15   methods: {
16     // 選擇器選中動態新增標籤
17     chooseGame () {
18       if (this.drawerForm.gameIds.length !== 0) {
19         // 臨時物件儲存選項
20         let temp = {}
21         temp.gameId = this.drawerForm.gameIds[this.drawerForm.gameIds.length - 1]
22         this.belongDeptOptions.forEach(item => {
23           if (item.gameId === temp.gameId) temp.gameName = item.gameName
24         })
25         // 選擇相同標籤等於刪除該標籤
26         var tFlag = true // 標記是否在已有標籤中存在新增標籤,若存在,則不新增而是刪除
27         for (let i = 0; i < this.tags.length; i++) {
28           if (this.tags[i].gameId === temp.gameId) {
29             tFlag = false
30             this.tags.splice(i === this.tags.length - 1 ? 0 : i + 1, 1) // 這裡的i+1具體也不是很清楚...本意是取index但是實際取到的是index-1所以就+1了,然後index=0的時候實際是this.tags.length - 1
31           }
32         }
33         // 未重複且非空標籤才push
34         if (tFlag && !temp.gamaId) this.tags.push(temp)
35       } else { // 未選擇任何一項時直接賦空值
36         this.tags = []
37       }
38     },
39     // 清空標籤
40     clearDo () {
41       this.tags = []
42     },
43     // 標籤關閉
44     tagClose (tag) {
45       this.tags.splice(this.tags.indexOf(tag), 1)
46       this.drawerForm.gameIds.splice(this.drawerForm.gameIds.indexOf(tag.gameId), 1)
47     }
48   }
49 }
50 </script>