Element-plus彈出框popover,使用自定義的圖標選擇組件

自定義的圖標選擇組件是若依的項目的

在這里插入圖片描述

1. 若依的圖標選擇組件

  • js文件,引入所有的svg圖片
let icons = []
// 注意這里的路徑,一定要是自己svg圖片的路徑
const modules = import.meta.glob('./../../assets/icons/svg/*.svg');
for (const path in modules) {const p = path.split('assets/icons/svg/')[1].split('.svg')[0];icons.push(p);
}export default icons
  • vue組件
    1. 自定義的SvgIcon組件,每個人定義的方式都不用,這里重要的就是name屬性:圖片的名字
    2. defineProps:activeIcon: 用于返顯用戶已經選擇或者原本就存在的圖標
    3. meit:訂閱selected事件,發送用戶當前選擇的圖標
    4. defineExpose:reset方法,向外拋出方法,在父組件中可以清除搜索框中的內容
<template><div class="icon-body"><el-inputv-model="iconName"class="icon-search"clearableplaceholder="請輸入圖標名稱"@clear="filterIcons"@input="filterIcons"><template #suffix><SvgIcon name="search"/></template></el-input><div class="icon-list"><div class="list-container"><div v-for="(item, index) in iconList" class="icon-item-wrapper" :key="index" @click="selectedIcon(item)"><div :class="['icon-item', { active: activeIcon === item }]"><!--自定義的SvgIcon組件,每個人定義的方式都不用,這里重要的就是name屬性:圖片的名字--><SvgIcon :name="item" class-name="icon" style="height: 25px;width: 16px;"/><span>{{ item }}</span></div></div></div></div></div>
</template><script setup>
import icons from './requireIcons'
import SvgIcon from '@/components/svgicon/SvgIcon.vue'
// activeIcon: 用于返現用戶已經選擇的圖標
const props = defineProps({activeIcon: {type: String}
});const iconName = ref('');
const iconList = ref(icons);
// 訂閱selected時間,發送用戶當前選擇的圖標
const emit = defineEmits(['selected']);// 通過js文件中的方法,將icon/svg文件夾中的圖標的名字取出來
function filterIcons() {iconList.value = iconsif (iconName.value) {iconList.value = icons.filter(item => item.indexOf(iconName.value) !== -1)}
}function selectedIcon(name) {emit('selected', name)document.body.click()
}function reset() {iconName.value = ''iconList.value = icons
}
// 向外拋出方法:在父組件中可以清除搜索框中的內容
defineExpose({reset
})
</script><style lang='scss' scoped>.icon-body {width: 100%;padding: 10px;.icon-search {position: relative;margin-bottom: 5px;width: 50%;}.icon-list {height: 200px;overflow: auto;.list-container {display: flex;flex-wrap: wrap;.icon-item-wrapper {width: calc(100% / 3);height: 25px;line-height: 25px;cursor: pointer;display: flex;.icon-item {display: flex;max-width: 100%;height: 100%;padding: 0 5px;&:hover {background: #ececec;border-radius: 5px;}.icon {flex-shrink: 0;}span {display: inline-block;vertical-align: -0.15em;fill: currentColor;padding-left: 2px;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;}}.icon-item.active {background: #ececec;border-radius: 5px;}}}}}
</style>

2. 在項目中引入組件

引入組件 <IconSelect @selected="iconSelected" ref="iconSelect" :activeIcon="formData.icon"/>

  1. @selected="iconSelected":接收子組件發送的事件,圖標被選中
  2. :activeIcon="formData.icon":給子組件傳遞圖標,比如在修改數據時,數據中原本就存在圖標
  3. ref="iconSelect":使用子組件的實例,調用子組件拋出的方法
<el-popoverplacement="bottom-start":width="200"trigger="click"
><!-- popover彈出框的插槽,這個插槽的決定了彈出框在頁面顯示的效果,這里顯示的是input輸入框 --><template #reference><el-input v-model="formData.icon" placeholder="請選擇圖標" clearable @clear="clearIconInput"><!-- input的插槽,input框前面顯示的圖標 --><template #prefix><svg-icon v-if="formData.icon" :name="formData.icon" /><svg-icon v-else name="search" /></template></el-input></template><!-- popover彈出框的插槽,這個插槽決定彈出框彈出后顯示的內容,這里顯示的是IconSelect組件 --><template #default><!-- 彈出框的內容是自定義組件 --><IconSelect style="background-color: #fff;width:500px;border:1px black solid" @selected="iconSelected" ref="iconSelect" :activeIcon="formData.icon"/></template>
</el-popover>
<script setup>
const formData = reactive({icon: undefined,
})
// 子組件的ref,用戶調用子組件中defineExpose暴露的方法
const iconSelectRef = useTemplateRef("iconSelect")
// 子組件IconSelect通過emit發送的訂閱消息
const iconSelected = (name) => {formData.icon = name
}
// 調用子組件iconSelect的reset方法
const clearIconInput = () => {formData.icon = undefinediconSelectRef.value.reset()
}
</script>

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/76722.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/76722.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/76722.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

openmv用了4個了,燒了2個,質量堪憂啊

都是原裝貨&#xff0c;主板出現過存儲不完全、圖像存不上、主板代碼保存亂碼、意外出現亂碼的現象。 希望要用的童鞋謹慎使用。

基于DrissionPage的Taptap熱門游戲數據爬蟲實戰:從Requests到現代爬蟲框架的遷移指南(含完整代碼復制)

目錄 ?編輯 一、項目重構背景與技術選型 1.1 原代碼問題分析 1.2 DrissionPage框架優勢 二、環境配置與基礎改造 2.1 依賴庫安裝 2.2 基礎類改造 三、核心功能模塊重構 3.1 請求參數自動化生成 3.2 智能頁面渲染 3.3 數據解析優化 四、數據庫操作增強 4.1 批量插入…

解析K8S四層網絡設計

模仿七層網絡模型&#xff0c;抽象出四層模型 POD網絡 同一節點上的pod網絡 依賴于虛擬網橋/網卡&#xff08;linux虛擬設備&#xff09;pod內容器共享網絡棧&#xff08;pause容器創建&#xff09; 不同節點上的pod網絡 路由方案&#xff1a;依賴于底層網絡設備&#x…

FPGA實現數碼管顯示分秒時間

目錄 一. verilog實現 二. 燒錄驗證 三. 結果驗證 使用開發板&#xff1a;DE2-115開發板 一. verilog實現 要實現分和秒&#xff0c;需要知道定時器的頻率&#xff0c;通過查手冊可知&#xff0c;我使用的開發板時鐘為50hz&#xff0c;也就是時鐘一個周期是2微秒。 5000000…

Spring 核心技術解析【純干貨版】- XVI:Spring 網絡模塊 Spring-WebMvc 模塊精講

在現代 Web 開發中&#xff0c;高效、穩定、可擴展的框架至關重要。Spring WebMvc 作為 Spring Framework 的核心模塊之一&#xff0c;為開發人員提供了強大的 MVC 體系支持&#xff0c;使得 Web 應用的構建更加便捷和規范。無論是傳統的 JSP 視圖渲染&#xff0c;還是基于 RES…

MySQL系統庫匯總

目錄 簡介 performance_schema 作用 分類 簡單配置與使用 查看最近執行失敗的SQL語句 查看最近的事務執行信息 sys系統庫 作用 使用 查看慢SQL語句慢在哪 information_schema 作用 分類 應用 查看索引列的信息 mysql系統庫 權限系統表 統計信息表 日志記錄…

標題:利用 Rork 打造定制旅游計劃應用程序:一步到位的指南

引言&#xff1a; 在數字化時代&#xff0c;旅游計劃應用程序已經成為旅行者不可或缺的工具。但開發一個定制的旅游應用可能需要耗費大量時間與精力。好消息是&#xff0c;Rork 提供了一種快捷且智能的解決方案&#xff0c;讓你能輕松實現創意。以下是使用 Rork 創建一個定制旅…

GATT(Generic Attribute Profile)是藍牙低功耗(Bluetooth Low Energy,簡稱BLE)協議棧中的一個核心協議

藍牙的 GATT&#xff08;Generic Attribute Profile&#xff09; 是藍牙低功耗&#xff08;Bluetooth Low Energy&#xff0c;簡稱BLE&#xff09;協議棧中的一個核心協議&#xff0c;用于定義設備如何通過藍牙進行數據傳輸和交互。GATT 是基于 ATT&#xff08;Attribute Proto…

[ deepseek 指令篇章 ]300個領域和賽道喂飯級deepseek指令

&#x1f36c; 博主介紹 &#x1f468;?&#x1f393; 博主介紹&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高興認識大家~ ?主攻領域&#xff1a;【滲透領域】【數據通信】 【通訊安全】 【web安全】【面試分析】 &#x1f389;點贊?評論?收藏 養成習…

數據結構 -- 圖的存儲

圖的存儲 鄰接矩陣法 鄰接矩陣存儲不帶權圖 0 - 表示兩個頂點不鄰接 1 - 表示兩個頂點鄰接 在無向圖中&#xff0c;每條邊在矩陣中對應兩個1 在有向圖中&#xff0c;每條邊在矩陣中對應一個1 //不帶權圖的鄰接矩陣存儲 #define MaxVertexNum 100 //頂點數目的最大值 typed…

25.4.4錯題分析

計算機組成原理 總線特點 考察總線特點&#xff0c;串行總線&#xff0c;一次只傳1bit&#xff0c;采用單條電纜&#xff0c;抗干擾能力強&#xff0c;傳輸距離較遠&#xff0c;成本低&#xff0c;但傳輸速度慢&#xff0c;延遲較高&#xff0c;不適用大規模數據傳輸 并行總線…

規則引擎Drools

1.規則引擎概述 1.1 什么是規則引擎 規則引擎 全稱為業務規則管理系統&#xff0c;英文名為BRMS&#xff0c;規則引擎的主要思想是將應用程序中的業務決策部分分離出來&#xff0c;并使用預定義的語義模塊編寫業務規則&#xff0c;由用戶或開發者在需要時進行配置和管理。 需…

框架PasteForm實際開發案例,換個口味顯示數據,支持echarts,只需要標記幾個特性即可在管理端顯示(2)

PasteForm框架的主要思想就是對Dto進行標記特性,然后管理端的頁面就會以不一樣的UI呈現 使用PasteForm框架開發,讓你免去開發管理端的煩惱,你只需要專注于業務端和用戶端! 在管理端中,如果說表格是基本的顯示方式,那么圖表chart就是一個錦上添花的體現! 如果一個項目擁…

【工具】在 Visual Studio 中使用 Dotfuscator 對“C# 類庫(DLL)或應用程序(EXE)”進行混淆

在 Visual Studio 中使用 Dotfuscator 進行混淆 Dotfuscator 是 Visual Studio 自帶的混淆工具&#xff08;Dotfuscator Community Edition&#xff0c;簡稱 CE&#xff09;。它可以混淆 C# 類庫&#xff08;DLL&#xff09;或應用程序&#xff08;EXE&#xff09;&#xff0c…

線程同步與互斥(上)

上一篇&#xff1a;線程概念與控制https://blog.csdn.net/Small_entreprene/article/details/146704881?sharetypeblogdetail&sharerId146704881&sharereferPC&sharesourceSmall_entreprene&sharefrommp_from_link我們學習了線程的控制及其相關概念之后&#…

[Linux系統編程]進程信號

進程信號 1. 信號入門1.1 信號基本概念1.2 技術應用角度的信號2. 信號的產生2.1 通過終端按鍵(如鍵盤)產生信號2.2 通過異常產生信號2.3 調用系統函數向進程發信號2.4 由軟件條件產生信號2.5 總結3. 阻塞信號3.1 信號其他相關常見概念3.2 內核中的信號表示3.3 sigset_t3.3.1 …

要素的選擇與轉出

1.要素選擇的三種方式 當要在已有的數據中選擇部分要素時&#xff0c;ArcMap提供了三種方式:按屬性選擇、位置選擇及按圖形選擇。 1)按屬性選擇 通過設置 SQL查詢表達式&#xff0c;用來選擇與選擇條件匹配的要素。 (1)單擊主菜單下【選擇】【按屬性選擇】&#xff0c;打開【按…

Springboot + Vue + WebSocket + Notification實現消息推送功能

實現功能 基于Springboot與Vue架構&#xff0c;首先使用Websocket實現頻道訂閱&#xff0c;在實現點對點與群發功能后&#xff0c;在前端調用windows自帶的消息通知&#xff0c;實現推送功能。 開發環境 Springboot 2.6.7vue 2.6.11socket-client 1.0.0 準備工作 在 Vue.js…

云手機如何防止設備指紋被篡改

云手機如何防止設備指紋被篡改 云手機作為虛擬化設備&#xff0c;其設備指紋的防篡改能力直接關系到賬戶安全、反欺詐和隱私保護。以下以亞矩陣云手機為例&#xff0c;講解云手機防止設備指紋被篡改的核心技術及實現方式&#xff1a; 系統層加固&#xff1a;硬件級安全防護 1…

有人DTU使用MQTT協議控制Modbus協議的下位機-含數據庫

本文為備忘錄&#xff0c;不做太多解釋。 DTU型號&#xff1a;G780 服務器&#xff1a;win2018 一。DTU設置 正確設置波特率&#xff0c;進入配置狀態&#xff0c;獲取當前參數&#xff0c;修改參數&#xff0c;設置并保存所有參數。 1.通道1設置 2.Modbus輪詢設置 二&am…