日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

vue組件系列之TagsInput詳解

瀏覽:31日期:2023-01-20 18:27:05

簡(jiǎn)介

TagsInput 是一種可編輯的輸入框,通過(guò)回車或者分號(hào)來(lái)分割每個(gè)標(biāo)簽,用回退鍵刪除上一個(gè)標(biāo)簽。用 vue 來(lái)實(shí)現(xiàn)還是比較簡(jiǎn)單的。

先看效果圖,下面會(huì)一步一步實(shí)現(xiàn)他。

vue組件系列之TagsInput詳解

注:以下代碼需要vue-cli環(huán)境才能執(zhí)行

(一)偽造一個(gè)輸入框

因?yàn)閱涡械奈谋究蛑荒苷故炯兾谋荆詧D里面的標(biāo)簽實(shí)際上都是 html元素,用vue模板來(lái)寫(xiě)的話,是這樣的:

<template><div @click=’focus’> <button class=’btn’ v-for=’(tag, index) in tags’ :key=’index’> {{tag}} </button> <input type='text' ref=’input’ v-model=’current’></div></template><script>export default { name: ’TagsInput’, methods: { focus () { this.$refs.input.focus() }, }, data () { return { tags: [], current: ’’ } }}</script><style lang=’less’> .muli-tags{ padding: 5px 10px; display: block; border: 1px solid #ccc; input{ background: transparent; } } .btn{ margin: 0 5px 3px 0; padding: 4px 5px; background: #fff; border: 1px solid #eee; box-shadow: 0 0 4px; }</style>

(二)監(jiān)聽(tīng)輸入

在偽造好一個(gè)輸入框之后,我們對(duì)輸入框的事件進(jìn)行處理,

回車和逗號(hào)會(huì)把input的值添加到tags數(shù)組,然后清空input 添加值之前,判斷tags數(shù)組是否已經(jīng)包含同名的值 按回退鍵,刪除最近的一個(gè)標(biāo)簽

// @keydown.188 188代表是是分號(hào)鍵的keyCode<input type='text' ref=’input’ @keyup.enter='add' @keydown.delete='del' @keydown.188=’split’ v-model=’current’> methods: { // 按下分號(hào)鍵的時(shí)候,需要阻止默認(rèn)事件,否則會(huì)出現(xiàn)分號(hào) split (e) { e.preventDefault() this.add(e) }, add (e) { const val = e.target.value if (!val) return // 如果已經(jīng)存在相同tag,不再添加 if (this.tags.indexOf(val) > -1) return // 把輸入值添加到tag,并清空文本框 this.tags.push(val) this.current = ’’ }, del (e) { // 當(dāng)文本框內(nèi)沒(méi)有值,再按回退鍵,則刪除最后一個(gè)tag if (!e.target.value.length) { this.tags.pop() } },}

(三)刪除標(biāo)簽

前面都是通過(guò)鍵盤(pán)來(lái)操作標(biāo)簽,鼠標(biāo)點(diǎn)擊標(biāo)簽應(yīng)該也是可以刪除的

<button class=’btn’ v-for=’(tag, index) in tags’ :key=’index’ @click=’delTag(index)’>{{tag}} <span>x</span></button>methods: { // 刪除點(diǎn)擊的標(biāo)簽 delTag (index) { this.tags.splice(index, 1) }}

(四)自定義 v-model

通過(guò)上面的步驟,一個(gè) tagsinput 組件就已經(jīng)做好了,再給他添加自定義的 v-model ,讓他可以像input一樣響應(yīng)表單數(shù)據(jù)。

// props props: { value: Array, required: true, default: () => [] } // computed computed: { tags () { return this.value.slice() } } // methods methods: { // 刪除點(diǎn)擊的標(biāo)簽 delTag (index) { this.tags.splice(index, 1) this.$emit(’input’, this.tags) } }

(五)完整代碼

// TagsInput.vue<template> <div @click=’focus’> <button class=’btn’ v-for=’(tag, index) in tags’ :key=’index’ @click=’delTag(index)’>{{tag}} <span>x</span></button> <input type='text' ref=’input’ @keyup.enter='add' @keydown.delete='del' @keydown.188=’split’ v-model=’current’> </div></template><script>export default { props: { value: Array, required: true, default: () => [] }, methods: { focus () { this.$refs.input.focus() }, split (e) { e.preventDefault() this.add(e) }, add (e) { const val = e.target.value if (!val) return if (this.tags.indexOf(val) > -1) return this.tags.push(val) this.$emit(’input’, this.tags) this.current = ’’ }, del (e) { if (!e.target.value.length) { this.tags.pop() this.$emit(’input’, this.tags) } }, delTag (index) { this.tags.splice(index, 1) this.$emit(’input’, this.tags) } }, computed: { tags () { return this.value.slice() } }, data () { return { current: ’’ } }}</script><style lang=’less’>.muli-tags{ padding: 5px 10px; display: block; border: 1px solid #ccc; input{ background: transparent; } .btn{ margin: 0 5px 3px 0; padding: 4px 5px; background: #fff; border: 1px solid #eee; box-shadow: 0 0 4px; }}</style>

作為組件被調(diào)用,這樣就可以看到像文章開(kāi)頭那幅圖一樣的組件了。

// 父組件<template> <tags-input v-model=’tags’/></template><script>import TagsInput from ’./TagsInput.vue’export default { components: { TagsInput }, data () { return { tags: [’tag1’, ’tag2’, ’tag3’] } }}</script>

總結(jié)

到此這篇關(guān)于vue組件TagsInput的文章就介紹到這了,更多相關(guān)vue組件TagsInput內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Vue
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久九九国产| 99在线精品视频在线观看| 欧美精品导航| 国产欧美日韩精品一区二区免费 | 久久国产视频网| 国产精品大片免费观看| 精品免费av一区二区三区| 中文字幕高清在线播放| 中文在线中文资源| 久久久久久久久丰满| av不卡在线| 日韩高清一级| 成人午夜毛片| 在线天堂资源www在线污| 久久久噜噜噜| 国产精品日韩久久久| 日本va欧美va欧美va精品| 国产日韩中文在线中文字幕| 成人在线黄色| 91精品高清| 国产精品一页| 欧美日韩一二三四| 亚洲人成毛片在线播放女女| 国产精品片aa在线观看 | 中文字幕在线看片| av不卡在线| 久久精品国产成人一区二区三区| 久久青草久久| 免费看欧美美女黄的网站| 久久精品xxxxx| 亚洲精品成人| 免费在线欧美黄色| 亚洲一区国产| 热三久草你在线| 国产精品自在| 午夜在线一区| 国产 日韩 欧美 综合 一区 | 在线视频日韩| 久久影院午夜精品| 欧美日韩伊人| 日韩亚洲在线| 欧美激情另类| 久久国产尿小便嘘嘘| 99pao成人国产永久免费视频| 国产日韩欧美中文在线| 夜夜精品视频| 欧美好骚综合网| 国产精品久久久久9999高清| 日韩高清欧美| 国产精品一在线观看| 麻豆亚洲精品| 自拍日韩欧美| 中文一区在线| 在线午夜精品| 三级欧美韩日大片在线看| 今天的高清视频免费播放成人| 久草精品视频| 国产精品免费大片| 久久99免费视频| 国产日韩中文在线中文字幕| 最近国产精品视频| 国产麻豆综合| 久久中文字幕av| 亚洲第一精品影视| 欧美成人精品| 午夜av一区| 日韩精品一级中文字幕精品视频免费观看 | 蘑菇福利视频一区播放| 亚洲91视频| 欧美亚洲国产激情| 亚洲网站视频| 蜜臀精品一区二区三区在线观看| 国产欧美日韩一区二区三区四区| 手机精品视频在线观看| 日韩中文字幕不卡| 日韩国产欧美三级| 国产精品15p| 福利片在线一区二区| 美女少妇全过程你懂的久久| 免费黄网站欧美| 国产九一精品| 国产综合视频| 亚洲色图国产| 国产精品一区二区三区www| 国产精品白丝一区二区三区| 91视频一区| 婷婷成人在线| 久久精品99国产精品| 亚洲午夜天堂| 日韩区欧美区| 亚洲国产专区| 欧美国产日韩电影| 亚洲综合欧美| 亚洲一级少妇| 久久国产日韩欧美精品| 国产综合精品一区| 精品一区二区三区免费看 | 欧美日本久久| 日本精品黄色| 日韩国产一二三区| 日韩欧美二区| 久久国内精品| 亚洲一区欧美| 日韩电影二区| 国产欧美亚洲精品a| 欧美精品自拍| 岛国精品一区| 国产高清亚洲| 亚洲精品乱码久久久久久蜜桃麻豆 | 97se综合| 国产精品久久久久久久久免费高清 | 亚洲经典在线| 欧美日韩视频免费观看| 国产精品毛片aⅴ一区二区三区| 香蕉久久久久久久av网站| 久久网站免费观看| 欧美日韩一区二区三区四区在线观看| 成人av二区| 久久久久91| av亚洲一区二区三区| 97精品中文字幕| 麻豆一区二区三区| 久久精品 人人爱| 亚洲精品动态| 日韩av二区在线播放| 亚洲一区久久| 日韩一级欧洲| 一区二区国产精品| 天堂成人免费av电影一区| 欧美午夜不卡影院在线观看完整版免费| 九九色在线视频| 久久精品伊人| 国产一区二区三区成人欧美日韩在线观看| 国产欧美日韩在线观看视频| 91国内精品| 久久精品一区二区国产| 美女久久99| 高潮一区二区| 亚洲成人一区| 一区二区亚洲视频| 性色一区二区| 日本va欧美va欧美va精品| 欧美天堂在线| 久久久久久色 | 国产调教精品| 国产伊人久久| 中文字幕系列一区| 亚洲一区免费| 欧美日韩伊人| 久久影院资源站| 欧美一区二区三区激情视频 | 精品三级在线| 一区二区自拍| 国产精品一区二区美女视频免费看| 精品视频网站| 国产亚洲综合精品| 日韩精品一区二区三区中文在线| 国产精品密蕾丝视频下载| 天堂√8在线中文| 另类亚洲自拍| 黄色精品视频| 中文字幕日韩高清在线| 国产精品久av福利在线观看| 麻豆精品蜜桃| 欧美精品中文| 亚洲深夜影院| 麻豆视频在线看| 日韩高清在线观看一区二区| 99久久久久| 国产成人精选| 欧美视频久久| 水蜜桃久久夜色精品一区的特点| 国产欧美丝祙| 成人在线观看免费视频| 久久成人精品| 久久精品99久久无色码中文字幕| 综合激情网站| 不卡在线一区二区| 精品视频国内| 欧美激情福利| 久久狠狠久久| 亚洲精品进入| 视频一区欧美日韩| 欧美日韩视频| 亚洲国产一区二区在线观看 | 视频一区二区不卡| 午夜精品免费| 午夜日韩av| 久久不射中文字幕| 在线视频亚洲欧美中文| 午夜久久一区| 999久久久91| 国产99精品一区| 91精品福利| 蜜臀av在线播放一区二区三区| 欧美特黄一区| 午夜天堂精品久久久久| 91av一区| 精品福利久久久| 91精品一区二区三区综合|