展示框選擇

好的,非常感謝您提供更詳細的項目情況。這是一個非常典型的父子組件通信場景。

根據您的新需求,我將對代碼進行重構:

  1. FaultSelect.vue (子組件): 這個組件現在將變得更加“純粹”。它只負責自身的下拉框邏輯,不關心外部按鈕,并通過 props 接收可見性狀態,通過 emits 將選擇結果通知父組件。
  2. ParentComponent.vue (父組件): 這個組件將管理應用的狀態,包括按鈕、下拉框的可見性以及展示由子組件傳遞上來的數據。

這樣的結構使得組件職責單一,更易于維護和復用,完全符合大型項目的開發規范。


1. 子組件: FaultSelect.vue

這個組件現在只包含下拉框。它接收一個 visible 屬性來控制顯示,并通過 update:selectedOrder 事件將選中的完整對象發送出去。

<template><div v-if="visible" class="fault-select-container"><el-selectv-model="selectedOrderId"placeholder="請選擇故障工單"class="fault-select"filterable@change="handleSelectionChange"><el-optionv-for="order in faultOrders":key="order.cm_order_id":label="order.cm_order_id":value="order.cm_order_id"/></el-select></div>
</template><script setup>
import { ref, onMounted } from 'vue';
import { ElMessage } from 'element-plus';// --- Props & Emits 定義 ---/*** @description* defineProps 用于接收父組件傳遞的屬性。* 'visible': 控制此組件的顯示/隱藏。*/
const props = defineProps({visible: {type: Boolean,required: true,default: false,},
});/*** @description* defineEmits 用于聲明該組件會觸發哪些自定義事件。* 'update:selectedOrder': 當用戶選擇一個選項時觸發,將選中的完整工單對象傳遞給父組件。*/
const emit = defineEmits(['update:selectedOrder']);// --- 響應式狀態 ---/*** @description 存儲從后臺獲取的故障工單列表* @type {import('vue').Ref<Array<{cm_order_id: string, data: string}>>}*/
const faultOrders = ref([]);/*** @description 存儲當前選中的故障工單ID。它的狀態會在組件隱藏時被保留。* @type {import('vue').Ref<string | null>}*/
const selectedOrderId = ref(null);// --- 方法 ---/*** @description 模擬從后臺異步獲取故障數據*/
const fetchFaultOrders = async () => {try {// 模擬1秒網絡延遲await new Promise(resolve => setTimeout(resolve, 1000));// 模擬成功返回的數據const mockData = [{ cm_order_id: 'CM-20250708-0000047', data: '故障詳情47: 核心模塊溫度過高...' },{ cm_order_id: 'CM-20250708-0000021', data: '故障詳情21: 通信總線錯誤...' },{ cm_order_id: 'CM-20250708-0000025', data: '故障詳情25: 主電源電壓異常...' },];faultOrders.value = mockData;} catch (error) {ElMessage.error('獲取故障數據失敗!');console.error(error);}
};/*** @description 當下拉框選項變化時觸發* @param {string} selectedId - 當前選中的 cm_order_id*/
const handleSelectionChange = (selectedId) => {// 從列表中找到完整的工單對象const selectedOrderObject = faultOrders.value.find((order) => order.cm_order_id === selectedId);// 如果找到了,就通過 emit 事件將其發送給父組件if (selectedOrderObject) {emit('update:selectedOrder', selectedOrderObject);}
};// --- 生命周期鉤子 ---onMounted(() => {// 組件掛載后立即獲取數據,為用戶點擊“修復故障”做好準備fetchFaultOrders();
});
</script><style scoped>
/*將組件定位在右上角。父容器需要有 position: relative;
*/
.fault-select-container {position: absolute;top: 20px;right: 20px;z-index: 1000;background-color: #fff;padding: 10px;border-radius: 8px;box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
}.fault-select {width: 260px;
}
</style>

2. 父組件: ParentComponent.vue (示例)

這個父組件包含了控制按鈕,并負責調用子組件和處理子組件傳回的數據。

<template><div class="parent-container"><div class="main-content"><h1>地圖/主監控頁面</h1><div v-if="currentFault" class="fault-display-panel"><h3>故障詳情: {{ currentFault.cm_order_id }}</h3><pre>{{ currentFault.data }}</pre></div></div><div class="control-panel"><el-button type="primary" @click="openFaultRepair">修復故障</el-button><el-button @click="closeFaultRepair">故障恢復</el-button></div><FaultSelect:visible="isDropdownVisible"@update:selectedOrder="showData"/></div>
</template><script setup>
import { ref } from 'vue';
// 引入子組件
import FaultSelect from '../components/FaultSelect.vue';// --- 狀態定義 ---/*** @description 控制 FaultSelect 子組件是否可見* @type {import('vue').Ref<boolean>}*/
const isDropdownVisible = ref(false);/*** @description 存儲從子組件接收到的當前故障工單對象* @type {import('vue').Ref<{cm_order_id: string, data: string} | null>}*/
const currentFault = ref(null);// --- 方法定義 ---/*** @description 點擊“修復故障”按鈕時調用,顯示下拉框*/
const openFaultRepair = () => {isDropdownVisible.value = true;
};/*** @description 點擊“故障恢復”按鈕時調用,隱藏下拉框*/
const closeFaultRepair = () => {isDropdownVisible.value = false;
};/*** @description* 這是傳遞給子組件的回調方法。當子組件觸發 'update:selectedOrder' 事件時,此方法被調用。* @param {{cm_order_id: string, data: string}} selectedOrder - 子組件傳遞過來的完整工單對象*/
const showData = (selectedOrder) => {console.log('從子組件接收到數據:', selectedOrder);currentFault.value = selectedOrder;// 在這里可以執行更多操作,例如在地圖上高亮顯示故障位置等
};
</script><style scoped>
/* 父容器需要相對定位,以便子組件的絕對定位生效 */
.parent-container {position: relative;width: 100%;height: 100vh;background-color: #f0f2f5;
}.main-content {padding: 20px;
}/* 將控制按鈕固定在右上角,子組件會顯示在其下方或附近 */
.control-panel {position: absolute;top: 20px;right: 320px; /* 調整位置,給下拉框留出空間 */z-index: 1001; /* 比下拉框高一級,確保按鈕可點 */
}.fault-display-panel {margin-top: 20px;padding: 20px;border-radius: 8px;background-color: #fff;border: 1px solid #ebeef5;width: 400px;
}.fault-display-panel h3 {margin: 0 0 10px 0;
}.fault-display-panel pre {white-space: pre-wrap;word-wrap: break-word;background-color: #f9f9f9;padding: 10px;border-radius: 4px;
}
</style>

總結與優勢

這種重構方式是 Vue 開發中的標準實踐:

  • 單一職責原則: FaultSelect 只管下拉框,ParentComponent 只管業務流程和狀態。
  • 單向數據流: 父組件通過 props 將狀態(visible)向下傳遞給子組件。
  • 事件驅動: 子組件通過 emits 將用戶操作的結果(selectedOrder)向上傳遞給父組件。
  • 高內聚,低耦合: 兩個組件之間的依賴性清晰明了,FaultSelect 可以在項目的其他地方被輕松復用。
  • 狀態保持: selectedOrderId 狀態保留在子組件內部,當父組件再次設置 :visible="true" 時,子組件會自然地顯示上次選中的值。同時,父組件的 currentFault 也保留了上次選擇的數據,實現了完整的狀態記憶。

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

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

相關文章

第5課:上下文管理與狀態持久化

第5課:上下文管理與狀態持久化 課程目標 掌握上下文存儲和檢索策略 學習會話狀態管理 了解數據持久化方案 實踐實現上下文管理系統 課程內容 5.1 上下文管理基礎 什么是上下文管理? 上下文管理是Agent系統中維護和利用歷史信息的能力,包括: 對話歷史:用戶與Agent的交互…

計算機畢業設計 基于大數據技術的醫療數據分析與研究 Python 大數據畢業設計 Hadoop畢業設計選題【附源碼+文檔報告+安裝調試】

博主介紹&#xff1a;?從事軟件開發10年之余&#xff0c;專注于Java技術領域、Python、大數據、人工智能及數據挖掘、小程序項目開發和Android項目開發等。CSDN、掘金、華為云、InfoQ、阿里云等平臺優質作者? &#x1f345;文末獲取源碼聯系&#x1f345; &#x1f447;&…

K8S集群管理(2)

目錄 1.什么是Pod的根容器&#xff1f; 2.解釋Pod的生命周期。 3.Init類型容器有什么特點&#xff0c;主要用途&#xff1f; 4.Sidecar類型容器和Init容器的區別在哪&#xff1f; 5.什么是靜態Pod&#xff1f; 6.說明K8s控制器的作用&#xff1f; 7.什么是ReplicaSet&#xff0…

視頻全模態referring分割:Ref-AVS: Refer and Segment Objects in Audio-Visual Scenes

一、TL&#xff1b;DR 為什么要做&#xff1a;傳統的referring分割無法使用音頻模態&#xff0c;本文提出Reference audio-visual Segmentation本文怎么做&#xff1a;構建首個 Ref-AVS 基準數據集通過充分利用多模態提示&#xff0c;將音頻信息通過和文本融合作為載體&#x…

A股大盤數據-20250916分析

&#x1f4ca; 一、大盤數據深度分析1.1 &#x1f9ee; 市場活躍度與資金流向總成交額&#xff1a;滬深京合計約 2.37萬億元&#xff0c;市場交投活躍&#xff0c;深市成交&#xff08;13516.4億&#xff09;明顯高于滬市&#xff08;9897.9億&#xff09;&#xff0c;顯示中小…

[計算機畢業設計]基于深度學習的噪聲過濾音頻優化系統研究

前言 &#x1f4c5;大四是整個大學期間最忙碌的時光,一邊要忙著備考或實習為畢業后面臨的就業升學做準備,一邊要為畢業設計耗費大量精力。近幾年各個學校要求的畢設項目越來越難,有不少課題是研究生級別難度的,對本科同學來說是充滿挑戰。為幫助大家順利通過和節省時間與精力投…

貪心算法應用:NFV功能部署問題詳解

Java中的貪心算法應用&#xff1a;NFV功能部署問題詳解 1. NFV功能部署問題概述 網絡功能虛擬化(NFV, Network Function Virtualization)是一種將傳統網絡設備功能從專用硬件轉移到虛擬化軟件的技術。在NFV功能部署問題中&#xff0c;我們需要將各種虛擬網絡功能(VNFs)部署到有…

SeriLog測試

安裝Serilog.Sinks.Seq(5.2.3.0)&#xff0c;Serilog.Sinks.File(7.0.0) 下載Seq安裝包并安裝&#xff08;https://datalust.co/download&#xff09; 代碼如下&#xff1a; private Logger _logger;private void button1_Click(object sender, EventArgs e){_logger new Lo…

HarmonyOS 5.0應用開發——V2裝飾器@param的使用

【高心星出品】 文章目錄V2裝飾器param的使用概念使用方法案例V2裝飾器param的使用 概念 在鴻蒙ArkTS開發中&#xff0c;Param裝飾器是組件間狀態管理的重要工具&#xff0c;主要用于父子組件間的單向數據傳遞&#xff0c;這一點與V1中的prop類似。 Param裝飾的變量支持本地…

SLAM | 無人機視覺/激光雷達集群SLAM技術進展綜述

主要內容如下: 無人機集群SLAM技術概述:介紹無人機集群SLAM的基本概念、重要性及面臨的挑戰,使用表格對比不同傳感器配置的特點。 多傳感器融合與協同SLAM架構:分析集中式、分布式和混合式協同架構的特點,使用表格對比不同架構的優缺點。 視覺協同SLAM的技術進展:總結直接…

信息化系統運維文檔資料,運維服務方案,運維巡檢方案

1、系統服務內容?1.1 服務目標?1.2 信息資產統計服務?1.3 網絡與安全系統運維服務?1.4 主機與存儲系統運維服務?1.5 數據庫系統運維服務?1.6 中間件運維服務?2、服務管理制度規范?2.1 服務時間管理?2.2 運維人員行為規范?2.3 現場服務支持規范?2.4 問題記錄與歸檔規…

JavaScript——document對象

DOM 是 document object model&#xff08;文檔對象模型&#xff09;的縮寫。它是一種與平臺、語言無關的接口&#xff0c;允許程序動態地訪問或更新 HTML、XML 文檔的內容、結構和樣式&#xff0c;且提供了一系列的函數和對象來實現增、刪、改、查操作。DOM 對象的一個特點是&…

UART,IIC,SPI總線(通信協議)

嵌 入 式 軟 件 筆 試 題要求&#xff1a;閉卷考試&#xff08;不能翻書、不能開電腦&#xff09;&#xff1b;作答時間50分鐘&#xff1b;共10道題目。volatile的作用有哪些volatile&#xff1a; 防止編譯器對代碼進行優化&#xff0c;直接從內存中取最新的值 應用場景&#x…

通信模組性能調優

通信模組性能調優 1 背景 2 高通平臺軟硬加速 2.1 NSS 2.2 SFE 2.3 PPE 3 CPU 負載均衡設置 3.1 啟用內核 RPS&RFS 功能 3.2 網卡隊列修改建議 3.3 調整負載前后的 CPU 使用對比 3.4 網卡中斷均衡 3.4.1 netdev_max_backlog 3.4.2 中斷綁核 3.5 CPU性能模式 3.6 熱管理 3.7…

消息隊列kafka的事務特性

kafka的java客戶端producer也支持事務消息嗎&#xff1f;具體是啥事務呢&#xff1f; 是的&#xff0c;Kafka的Java客戶端Producer確實支持事務消息。讓我詳細解釋Kafka事務的概念和使用方法。 Kafka事務的主要特點&#xff1a; Producer Transactions&#xff1a;確保多個消息…

用Python實現自動化的Web測試(Selenium)

Python作為數據科學和自動化領域的主流語言&#xff0c;在網絡爬蟲開發中占據著重要地位。本文將全面介紹Python爬蟲的技術棧、實現方法和最佳實踐。爬蟲技術概述網絡爬蟲&#xff08;Web Crawler&#xff09;是一種按照特定規則自動抓取互聯網信息的程序。它可以自動化地瀏覽網…

「Memene 摸魚日報 2025.9.17」上海張江人工智能創新小鎮正式啟動,華為 DCP 技術獲網絡頂會獎項

theme: condensed-night-purple 以下內容包括「人工智能生成內容」 上海張江人工智能創新小鎮正式啟動&#xff0c;華為 DCP 技術獲網絡頂會獎項 &#x1f44f;在昨天&#xff08;2025.9.16&#xff09;&#xff0c;AI領域有這些內容可能值得你關注&#xff1a; 上海張江人工智…

Vehiclehal的VehicleService.cpp

VehicleService.cpp 是 Android Automotive OS 中負責車輛相關功能的核心服務組件&#xff0c;主要處理車身信息獲取及狀態設置接口&#xff0c;通過 HIDL&#xff08;Hardware Interface Definition Language&#xff09;接口與系統框架層交互。 ?12核心功能VehicleService.c…

《LINUX系統編程》筆記p11

公共資源也稱為共享資源&#xff0c;是指可以被多個并發進程或線程共同訪問&#xff08;讀取或寫入&#xff09;的系統資源。臨界資源是公共資源的一個子集。特指那些一次僅允許一個進程或線程訪問的公共資源。如果一個進程正在使用它&#xff0c;其他試圖訪問該資源的進程必須…

spring-kafka消費異常處理

默認的消費異常處理 默認情況下&#xff0c;如果程序沒有顯式做任何的異常處理&#xff0c;spring-kafka會提供一個默認的DefaultErrorHandler, 它會使用FixedBackOff做重試&#xff0c;會不間斷的連續重試最多9次&#xff0c;也就是說一個消息最多會被消費10次。如果重試次數耗…