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

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

Vue+Element UI 樹形控件整合下拉功能菜單(tree + dropdown +input)

瀏覽:239日期:2022-12-03 08:09:30

這篇博客主要介紹樹形控件的兩個小小的功能:

下拉菜單 輸入過濾框

以CSS樣式為主,也會涉及到Vue組件和element組件的使用。

對于沒有層級的數(shù)據(jù),我們可以使用表格或卡片來展示。要展示或建立層級關(guān)系,就一定會用到樹形組件了。使用Vue + Element UI,構(gòu)建出最基本的樹如下圖所示:

Vue+Element UI 樹形控件整合下拉功能菜單(tree + dropdown +input)

現(xiàn)在我們就要在這個基礎(chǔ)上進(jìn)行改造,使頁面更加符合我們的交互場景。

下拉菜單

將下拉菜單嵌到樹節(jié)點中,使操作更加簡便、緊湊。

效果演示

效果如圖:

圖示1:懸浮在樹節(jié)點狀態(tài)

Vue+Element UI 樹形控件整合下拉功能菜單(tree + dropdown +input)

圖示2:點擊三個點圖標(biāo)狀態(tài)

Vue+Element UI 樹形控件整合下拉功能菜單(tree + dropdown +input)

圖示3: 選中并選擇菜單

Vue+Element UI 樹形控件整合下拉功能菜單(tree + dropdown +input)

如上,當(dāng)鼠標(biāo)懸浮在樹節(jié)點上時,出現(xiàn)豎著的三個小點,點擊時彈出下拉菜單,顯示可以對樹節(jié)點進(jìn)行的操作。

實現(xiàn)步驟

1、使用插槽(slot) + 子組件

父組件(含有樹形控件)模板代碼

<el-tree :data='resourceTree' :ref='tree' node-key='id' size='small' :highlight-current='true' :check-on-click-node='true' > <span slot-scope='{ node, data }'> <div class='custom-tree-node-wrapper'> <span class='custom-tree-node-label'> {{ node.label }} </span> <span class='operate-btns'> <dot-dropdown :events='dropMenuEvents' :data='{node,data}' @addNode='addNode' /> </span> </div> </span> </el-tree>

2、 DotDropdown 下拉框代碼

很多樹形結(jié)構(gòu)都會使用該下拉框,所以定義組件,方便復(fù)用。

<template> <el-dropdown trigger='click' size='small'> <i /> <el-dropdown-menu slot='dropdown'> <el-dropdown-item v-for=’(item,index) in events’ :key='index' :divided='index >0' @click.native='clickMenu(item)'> {{item.label}} </el-dropdown-item> </el-dropdown-menu> </el-dropdown></template><script>export default { props: { events: { type: Array, default: function() { return [ { label: ’新建同級’, funcName: ’addNode’ }, { label: ’編輯’, funcName: ’editNode’ }, { label: ’刪除’, funcName: ’deleteNode’ } ] } }, // 注入數(shù)據(jù) data: { type: Object } }, methods: { clickMenu(item) { this.$emit(item.funcName, this.data) } }}

模板代碼很簡單,是一個點擊觸發(fā)的下拉菜單組件(trigger='click'),菜單循環(huán)props中傳入的events屬性,data為從父組件拿到的數(shù)據(jù),定義了菜單和菜單的事件(方法名稱),當(dāng)點擊菜單(@click.native)時,觸發(fā):

this.$emit(item.funcName, this.data)

容易看出,數(shù)據(jù)和實現(xiàn)方法都是父組件的,該子組件只做了轉(zhuǎn)發(fā)。

3、 父組件使用子組件

引入和注冊子組件,并定義好對應(yīng)的方法即可。下面給出使用示例:

<span class='operate-btns'> <dot-dropdown v-if='data.type === 1' :events='dropMenuEvents' :data='{node,data}'/> <dot-dropdown v-if='data.type === 2' :events='sysDropMenuEvents' :data='{node,data}' @addNode='addResource' /> </span>

根據(jù)數(shù)據(jù)節(jié)點的類型,注入不同的events屬性,顯示不同的下拉框菜單。(常用場景:根節(jié)點不可刪除、不可編輯,只能新增子級,葉子節(jié)點可以新增同級和子級)。在父組件中的data中定義:

sysDropMenuEvents: [{ label: ’新增資源’, funcName: ’addNode’ }],dropMenuEvents: [ { label: ’新建同級’, funcName: ’addPeerNode’ }, { label: ’新建子級’, funcName: ’addNode’ }, { label: ’分配操作’, funcName: ’distributeAction’ }, { label: ’編輯’, funcName: ’editNode’ }, { label: ’刪除’, funcName: ’removeNode’ } ]

父組件編寫實際功能方法:

// 打開新增資源彈窗 addResource({ node, data }) { ... }

父組件注入data時,將樹節(jié)點插槽中的node和data都注入了進(jìn)去(:data='{node,data}'),在使用時也可以用過同樣的大括號+屬性名的方式拿到對應(yīng)的屬性,這里體現(xiàn)了ES6解構(gòu)賦值的特性。

4、父組件樣式

父組件中,樹節(jié)點的樣式:

.el-tree-node__content { position: relative; .operate-btns { position: absolute; right: 2px; display: none; } // 鼠標(biāo)懸停時,展示 &:hover, :focus-within { .operate-btns { display: inline; } } } } 子絕對,父相對,使操作按鈕靠貼邊顯示 無狀態(tài)時不顯示,hover或內(nèi)部元素被激活時顯示(:hover :focus-within)

5、子組件樣式

Vue+Element UI 樹形控件整合下拉功能菜單(tree + dropdown +input)

旋轉(zhuǎn)圖標(biāo)原本的圖標(biāo)使用的是element UI提供的 <i />,是橫著的點點點↓

Vue+Element UI 樹形控件整合下拉功能菜單(tree + dropdown +input)

圖標(biāo)有點小,顏色也不喜歡。改下字體讓它變大一點。這里注意需要修改的是元素的before偽類:

.el-icon-more:before { content: 'E794'; color: #c0c4cc; font-size: 20px;}

加一個transform將它旋轉(zhuǎn)90°,懸停時鼠標(biāo)樣式為pointer:

.rotate { cursor: pointer; margin-left: 5px; transform: rotate(90deg); }

點擊時,增加圓形半透明的灰色背景:

.rotate:focus { width: 20px; height: 20px; border-radius: 4em; background-color: rgba(130, 132, 138, 0.2);}

至此,下拉全部完成。除了用在樹節(jié)點中,也可以用在表格中。

輸入過濾框

el-tree提供了過濾方法,使用:filter-node-method='filterNode'屬性即可。這里主要分享樣式:效果:

Vue+Element UI 樹形控件整合下拉功能菜單(tree + dropdown +input)

Vue+Element UI 樹形控件整合下拉功能菜單(tree + dropdown +input)

模板代碼:

<div class='filter-input'> <el-input placeholder='輸入資源名稱進(jìn)行過濾' v-model='filterText' size='small' prefix-icon='el-icon-search'> </el-input></div>

去掉輸入框上、左右邊框和圓角,并兩側(cè)留出10px邊距

.el-input__inner,.el-input-group__prepend{ width: calc(100% - 20px); margin:0 10px; height: 40px; border-top:none; border-width: 0 0 1px; border-radius:0; }

調(diào)整搜索圖標(biāo)大小、顏色和粗細(xì),并稍微調(diào)整位置:

.el-input__prefix{ .el-input__icon{ margin-right: 15px; display: inline-block; } font-size:18px; }

此時點擊輸入框,只有下邊變藍(lán)色,希望圖標(biāo)的樣式也隨之更改。只有input被觸發(fā)了focus事件,icon感知不到,:focus偽類不滿足需求了。我們可以使用:focus-within偽類,加在icon和input共同的父類上。

.el-input:focus-within{ .el-icon-search:before { color: #3c6eff; font-weight: bold; } }

至此完成。

總結(jié)

沒寫前端之前以為前端只是展示從后端拿到的數(shù)據(jù),但現(xiàn)在覺得,前端作為面向用戶的直接門面,承擔(dān)了絕大部分交互體驗優(yōu)化的任務(wù)。合理的布局和樣式能避免用戶的無效操作,體驗的優(yōu)化是一個漫長而細(xì)致的過程,可能需要仔細(xì)打磨,才能做出好用的產(chǎn)品。

以上就是Vue+Element UI 樹形控件整合下拉功能菜單(tree + dropdown +input)的詳細(xì)內(nèi)容,更多關(guān)于Vue+Element UI 整合下拉菜單的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Vue
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久99影视| 国产激情精品一区二区三区| 日韩免费一区| 亚洲欧美日韩精品一区二区| 国产91在线播放精品| 日韩精品一区第一页| 国产乱码精品一区二区三区亚洲人| 欧美午夜不卡| 午夜在线播放视频欧美| 欧美精选一区二区三区| 麻豆精品少妇| 国产一区二区三区四区| 久久99青青| 久久这里只有精品一区二区| 日韩va亚洲va欧美va久久| 97久久精品| 欧美国产极品| 视频在线不卡免费观看| 国产精品极品| 成人黄色av| 色吊丝一区二区| 欧美日韩一区二区综合| 国产精品嫩草99av在线| 蜜桃视频免费观看一区| 免费人成黄页网站在线一区二区| 在线看片福利| 久久久久99| 在线综合亚洲| 欧美午夜网站| 国产极品模特精品一二| 国产三级一区| 激情国产在线| 欧美精选一区二区三区| 免费中文字幕日韩欧美| 婷婷精品在线| 国产精品99久久免费| 日本va欧美va精品发布| 不卡福利视频| 精品日产乱码久久久久久仙踪林| 亚洲一二av| 999久久久91| 亚洲日本网址| 日韩国产一区| 欧美freesex黑人又粗又大| 久久精品99国产精品日本| 免费在线看一区| 尹人成人综合网| 久久高清免费| av一区在线| 日韩欧美午夜| 日本美女一区| 国产成年精品| 国产v日韩v欧美v| 视频一区国产视频| 国产欧美日韩亚洲一区二区三区| 国产精品一区二区中文字幕| 电影天堂国产精品| 日韩av中文字幕一区二区| 国产a亚洲精品| 亚洲人成网77777色在线播放| 国产欧美激情| 麻豆精品网站| 性欧美xxxx免费岛国不卡电影| 日韩av一区二| 欧美成人亚洲| 激情国产在线| 久久av影院| 日本精品久久| 国产美女一区| 久久久影院免费| 日韩av影院| 免费人成在线不卡| 精品捆绑调教一区二区三区| 五月亚洲婷婷 | 日韩av电影一区| 天堂va在线高清一区| 日本天堂一区| 久久久久亚洲精品中文字幕| 日韩精品视频一区二区三区| 尤物网精品视频| 欧美 日韩 国产精品免费观看| 欧美亚洲在线日韩| 91精品福利| 综合五月婷婷| 国产亚洲一区二区三区不卡| 国产欧美另类| 成人污污视频| 久久一区二区三区电影| 视频在线在亚洲| 日本不卡一区二区三区| 麻豆国产欧美一区二区三区 | 日韩成人一级| 91亚洲精品在看在线观看高清| 热久久久久久| 久久精品卡一| 日韩欧美在线精品| 九九九精品视频| 国产午夜精品一区二区三区欧美| 日韩中出av| 欧美亚洲日本精品| 快she精品国产999| 久久中文字幕一区二区三区| 亚洲精品午夜av福利久久蜜桃| 日本欧美一区二区| 精精国产xxxx视频在线野外| 综合激情网...| 韩国久久久久久| 美女少妇全过程你懂的久久| 亚洲欧美日韩视频二区| 久久精品xxxxx| 精精国产xxxx视频在线野外| 日韩精品一级中文字幕精品视频免费观看 | 日韩毛片在线| 天堂成人国产精品一区| 日本一不卡视频| av资源亚洲| 三级亚洲高清视频| 久久久久九九精品影院| 免费av一区| 日韩av资源网| 91中文字幕精品永久在线| 亚洲一区欧美二区| 美日韩一区二区三区| 蜜桃成人av| 久久国际精品| 999久久久国产精品| 青青草精品视频| 不卡中文字幕| 精品久久网站| 日韩精品一级| 午夜久久黄色| av综合电影网站| 欧美激情麻豆| 日韩精品福利一区二区三区| 亚洲午夜久久久久久尤物| 欧美黑人做爰爽爽爽| 亚洲性视频h| 免费观看久久久4p| 欧美成人一二区| 久久裸体视频| 综合一区二区三区| 精品一区二区三区中文字幕在线| 久久久久一区| 日本国产欧美| 红杏一区二区三区| 尤物在线精品| 久久久久亚洲精品中文字幕| 国内精品福利| 国产精品午夜av| aa国产精品| 色综合五月天| 日韩精品视频在线看| 秋霞影视一区二区三区| 首页国产欧美久久| 国产麻豆久久| 少妇久久久久| 久久久久91| 在线亚洲观看| 视频一区二区欧美| 日韩激情一区二区| 国产精品亚洲片在线播放| 精品一区二区三区中文字幕视频 | 亚洲精品韩国| 四虎精品一区二区免费| 日韩区一区二| 国产欧美高清| 欧美午夜三级| 久久不见久久见国语| 麻豆一区在线| 国产精品亚洲一区二区三区在线观看| 91精品国产福利在线观看麻豆| 欧美理论视频| 免费美女久久99| 国产精品欧美在线观看| 精品久久久网| 青青久久av| 石原莉奈在线亚洲三区| 日韩国产精品久久久| 精品福利久久久| 激情久久久久久| 国产欧美视频在线| 日韩精品乱码av一区二区| 高清精品久久| 亚洲伊人影院| 亚洲伦乱视频| 午夜久久av| www成人在线视频| 久久狠狠久久| 国产91精品对白在线播放| 国产精品视频首页| 日韩在线短视频| 欧美特黄一区| 亚洲色图国产| 国产视频一区在线观看一区免费| 黄毛片在线观看| 欧美xxxx中国| 少妇精品久久久一区二区| 亚洲少妇在线| 欧美~级网站不卡| 日韩电影二区|