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

您的位置:首頁技術文章
文章詳情頁

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

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

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

下拉菜單 輸入過濾框

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

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

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

現在我們就要在這個基礎上進行改造,使頁面更加符合我們的交互場景。

下拉菜單

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

效果演示

效果如圖:

圖示1:懸浮在樹節點狀態

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

圖示2:點擊三個點圖標狀態

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

圖示3: 選中并選擇菜單

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

如上,當鼠標懸浮在樹節點上時,出現豎著的三個小點,點擊時彈出下拉菜單,顯示可以對樹節點進行的操作。

實現步驟

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 下拉框代碼

很多樹形結構都會使用該下拉框,所以定義組件,方便復用。

<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’ } ] } }, // 注入數據 data: { type: Object } }, methods: { clickMenu(item) { this.$emit(item.funcName, this.data) } }}

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

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

容易看出,數據和實現方法都是父組件的,該子組件只做了轉發。

3、 父組件使用子組件

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

<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>

根據數據節點的類型,注入不同的events屬性,顯示不同的下拉框菜單。(常用場景:根節點不可刪除、不可編輯,只能新增子級,葉子節點可以新增同級和子級)。在父組件中的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時,將樹節點插槽中的node和data都注入了進去(:data='{node,data}'),在使用時也可以用過同樣的大括號+屬性名的方式拿到對應的屬性,這里體現了ES6解構賦值的特性。

4、父組件樣式

父組件中,樹節點的樣式:

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

5、子組件樣式

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

旋轉圖標原本的圖標使用的是element UI提供的 <i />,是橫著的點點點↓

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

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

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

加一個transform將它旋轉90°,懸停時鼠標樣式為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);}

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

輸入過濾框

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='輸入資源名稱進行過濾' v-model='filterText' size='small' prefix-icon='el-icon-search'> </el-input></div>

去掉輸入框上、左右邊框和圓角,并兩側留出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; }

調整搜索圖標大小、顏色和粗細,并稍微調整位置:

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

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

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

至此完成。

總結

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

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

標簽: Vue
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美国产日韩电影| 久久精品国产99久久| 99在线|亚洲一区二区| 91久久国产| 免费在线观看日韩欧美| 日本aⅴ亚洲精品中文乱码 | 国产精品扒开腿做爽爽爽软件| 麻豆久久一区| 国产乱码午夜在线视频| 综合日韩av| 在线午夜精品| 日本亚洲视频| 精品国产中文字幕第一页| 四虎国产精品免费观看| 欧美一级精品| 一区二区亚洲视频| 国产毛片精品久久| 一本大道色婷婷在线| 免费成人av在线播放| 日韩精品一级| 成人一区不卡| 久久国产精品久久w女人spa| 国产乱码精品一区二区亚洲| 99久久99视频只有精品 | 精品网站999| 亚洲激情精品| 欧美永久精品| 99精品视频在线| 免费久久精品| 丝瓜av网站精品一区二区| 亚洲综合激情在线| 久久a爱视频| 欧美精选视频一区二区| 不卡av一区二区| 黄色欧美日韩| 成人影视亚洲图片在线| 不卡中文字幕| 久久国产免费看| 免费日韩一区二区| 麻豆国产91在线播放| 91成人精品| 91精品国产自产观看在线| 久久久久久夜| 高清av一区| 欧美一区激情| 国产精品最新| 色8久久久久| 亚洲欧美日本视频在线观看| 国产精品嫩模av在线| 福利一区视频| 日韩中文视频| 中文字幕免费精品| 久久精品女人| 日韩不卡免费视频| а√在线中文在线新版| 日韩中文影院| 国产精品极品在线观看| 免费欧美在线视频| 国产91在线播放精品| 91久久在线| 日韩欧美另类一区二区| 欧美日韩亚洲一区| 成人羞羞视频播放网站| 美女视频黄免费的久久| 啪啪亚洲精品| 亚洲特色特黄| 精品欧美日韩精品| 免费人成黄页网站在线一区二区| 久久免费影院| 亚洲神马久久| 国产精品毛片一区二区在线看| 最新国产拍偷乱拍精品| 精品网站aaa| 日本v片在线高清不卡在线观看| 国产综合亚洲精品一区二| 国产美女视频一区二区| 五月天综合网站| 日韩黄色大片| 日本成人精品| 亚洲婷婷丁香| 欧美日韩精品一区二区视频| 国产一区不卡| 日韩avvvv在线播放| 9国产精品视频| 神马午夜久久| 国产免费av一区二区三区| 亚洲精品成人一区| 国精品一区二区三区| 美女高潮久久久| 欧美日韩亚洲三区| 亚洲视频播放| 亚洲免费精品| 91看片一区| 国产极品久久久久久久久波多结野 | 国产精品一区毛片| 欧美在线精品一区| 日韩制服丝袜先锋影音| 久久午夜视频| 亚洲精品午夜av福利久久蜜桃| 女人av一区| 久久精品青草| 97精品资源在线观看| 亚洲一区二区av| 欧美日韩第一| 91久久午夜| 亚洲一级二级| 亚洲激情中文| 99成人超碰| 国产精品久久乐| 国产精品尤物| 欧美日韩一区二区国产| 国产精品网址| 日本午夜精品久久久久| 欧美伊人久久| 日本精品在线播放| 国产乱人伦精品一区| 日韩精彩视频在线观看| 国产日产一区| 久久精品超碰| 久久精品福利| 国产精品三p一区二区| 日本精品在线播放| 美女在线视频一区| 久久99高清| 国产精品1区在线| 国产精品99久久免费| 国产午夜精品一区二区三区欧美| 婷婷成人在线| 久久精品一本| 精品理论电影在线| 久久精品理论片| 欧美黄色网页| 成人精品亚洲| 亚洲免费网址| 最新国产精品久久久| 蜜桃av一区二区三区电影| 巨乳诱惑日韩免费av| 亚洲精品影视| 国产亚洲精品v| 日韩av一级片| 四虎国产精品免费观看| 天堂av在线| 中文一区在线| 婷婷精品在线| 日韩福利视频导航| 国产精品视频一区二区三区| 国模精品一区| 不卡视频在线| 蜜桃一区二区三区在线观看| 国产免费av一区二区三区| 久久精品国产福利| 国产精品成人自拍| 国产精品资源| jizzjizz中国精品麻豆| 一区三区视频| 亚洲精品日本| 亚洲欧洲美洲av| 欧美特黄一区| 欧美1区2区3| 国产传媒av在线| 国产精品久久久久久久免费软件| 亚洲www啪成人一区二区| 亚洲黄色免费av| 五月天av在线| 亚洲精品在线a| 精品一区二区三区亚洲| 日韩久久一区二区三区| 91欧美日韩在线| 麻豆国产精品视频| 精品一区二区三区视频在线播放| 精品日韩一区| 中文字幕在线视频久| 国产精品欧美一区二区三区不卡 | 久热综合在线亚洲精品| 日产精品一区| 亚洲开心激情| 另类综合日韩欧美亚洲| 久久天堂成人| 亚洲精品国产嫩草在线观看| 国语对白精品一区二区| 免费国产自久久久久三四区久久 | 日本天堂一区| 亚洲欧洲一区| 婷婷精品在线| 你懂的国产精品| 中文字幕成人| 麻豆理论在线观看| 日韩欧美中文字幕在线视频| 精品国产午夜| 美女网站久久| 91麻豆国产自产在线观看亚洲| 婷婷综合网站| 国产在线日韩精品| 亚洲欧洲一区二区天堂久久| 国产福利亚洲| 日本精品国产| 免费精品国产的网站免费观看| 成人在线超碰| 亚洲深爱激情| 麻豆精品在线视频|