如何實現聊天記錄編輯功能的互斥效果?
問題介紹
在實現聊天記錄編輯功能時,用戶希望在點擊一條聊天記錄進行編輯後,再點擊另一條記錄時,前一條記錄的編輯狀態能夠關閉,實現互斥效果。然而,實際效果卻是所有點擊的記錄都會同時展示編輯框,無法達到預期的互斥效果。
具體實現過程
子組件:
<!-- 編輯文本內容--> <div class="chat-container" v-if="props.dialogdata.showeditcontent && changemsgid"> <div class="chat-input-box"> <div class="top-boxes" v-loading="contentloading"> <el-input ref="textinput" id="chat-input" autosize v-model="editcontent" type="textarea" :placeholder="$t('text_send_to')"></el-input> </div> </div> <div class="input-tips"> esc鍵<span class="pub-color">取消</span> · 回車鍵<span class="pub-color">保存</span> </div> </div> <div v-else :class="['dc-chat-content', props.dialogdata.author.bot ? 'dc-chat-bot-content' : '']"> <!-- 工具欄渲染--> <el-popover placement="right" :visible="toolsvisible" :offset="1" :show-arrow="false" popper-class="custom-popper" :teleported="false"> <div v-if="!props.dialogdata.checked" class="more"> <el-button-group> <el-tooltip v-for="item in menuitems" :key="item.id" effect="dark" :content="item.title" placement="top"> <el-button :icon="item.icon" size="small" :disabled="item.id === '2' && (userinfo.username !== props.dialogdata.author.username || !boolean(props.dialogdata.content))"></el-button> </el-tooltip> </el-button-group> </div> <!-- ...其他代碼--><p>子組件script 內主要代碼:</p> <pre class="brush:php;toolbar:false"> const props = defineprops<dcdialogitemprops>() const emit = defineemits() const menuitems = [ { id: '1', icon: 'finished', title: $t('text_multiple_choice') }, { id: '2', icon: 'edit', title: $t('btn_edit') }, { id: '3', icon: 'chatdotsquare', title: $t('btn_reply') } ] // 處理菜單項點擊事件const editcontent = ref('') const changemsgid = ref('') const currentediting = ref(false) //用來標記表單是否正在提交const handleselect = (val: string) => { if(val === '1') { props.dialogdata.checked = true } else if (val === '2') { console.log('--handleselect---2', props.dialogdata); props.dialogdata.isediting = true currentediting.value = false editcontent.value = props.dialogdata.content changemsgid.value = props.dialogdata.msg_id } emit('menuclick', val, props.dialogdata) }</dcdialogitemprops>
父組件使用:
<dcdialogitem v-for="item in messagelist" class="pulldown-list-item" :key="item.msg_id" :dialog-data="item" :id="'msg' item.msg_id"></dcdialogitem>
messagelist 的數據格式:
[ { "msg_id": "1276491426334769232", "content": "啊撒大聲地", "checked": false }, { "msg_id": "1276493284222701702", "content": "asdasdaasdsadasd", "checked": false }, ...省略]
父組件script 主要方法:
const handlemenuclick = (val: string, dialogdata: any) => { if(val === '1') { messagelist.value.foreach((item) => { item.checked = true }) showrecords.value = true showreplymsg.value = false dialogdata.showeditcontent = false } else if(val === '2') { showreplymsg.value = false replyauthor.value = '' showrecords.value = false dialogdata.showeditcontent = true } else if(val === '3') { showreplymsg.value = true dialogdata.showeditcontent = false replyauthor.value = dialogdata.author.username replycontent.value = dialogdata.content } }
問題解決方案
問題在於,當用戶點擊不同的聊天記錄時,showeditcontent 屬性並沒有互斥地關閉其他記錄的編輯狀態。解決這個問題需要在父組件中維護一個全局的編輯狀態,並在每次點擊編輯時,關閉其他記錄的編輯狀態。
可以修改父組件中的handlemenuclick 方法如下:
const handleMenuClick = (val: string, dialogData: any) => { if(val === '1') { messageList.value.forEach((item) => { item.checked = true item.showEditContent = false // 確保關閉所有編輯狀態}) showRecords.value = true showReplyMsg.value = false dialogData.showEditContent = false } else if(val === '2') { messageList.value.forEach((item) => { item.showEditContent = false // 關閉其他記錄的編輯狀態}) showReplyMsg.value = false replyAuthor.value = '' showRecords.value = false dialogData.showEditContent = true // 僅打開當前記錄的編輯狀態} else if(val === '3') { messageList.value.forEach((item) => { item.showEditContent = false // 確保關閉所有編輯狀態}) showReplyMsg.value = true dialogData.showEditContent = false replyAuthor.value = dialogData.author.username replyContent.value = dialogData.content } }
通過上述修改,每次點擊編輯時,都會先關閉所有其他記錄的編輯狀態,再打開當前記錄的編輯狀態,從而實現互斥的效果。
以上是如何實現聊天記錄編輯功能的互斥效果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

在C 中測量線程性能可以使用標準庫中的計時工具、性能分析工具和自定義計時器。 1.使用庫測量執行時間。 2.使用gprof進行性能分析,步驟包括編譯時添加-pg選項、運行程序生成gmon.out文件、生成性能報告。 3.使用Valgrind的Callgrind模塊進行更詳細的分析,步驟包括運行程序生成callgrind.out文件、使用kcachegrind查看結果。 4.自定義計時器可靈活測量特定代碼段的執行時間。這些方法幫助全面了解線程性能,並優化代碼。

使用C 中的chrono庫可以讓你更加精確地控制時間和時間間隔,讓我們來探討一下這個庫的魅力所在吧。 C 的chrono庫是標準庫的一部分,它提供了一種現代化的方式來處理時間和時間間隔。對於那些曾經飽受time.h和ctime折磨的程序員來說,chrono無疑是一個福音。它不僅提高了代碼的可讀性和可維護性,還提供了更高的精度和靈活性。讓我們從基礎開始,chrono庫主要包括以下幾個關鍵組件:std::chrono::system_clock:表示系統時鐘,用於獲取當前時間。 std::chron

MySQL批量插入数据的高效方法包括:1.使用INSERTINTO...VALUES语法,2.利用LOADDATAINFILE命令,3.使用事务处理,4.调整批量大小,5.禁用索引,6.使用INSERTIGNORE或INSERT...ONDUPLICATEKEYUPDATE,这些方法能显著提升数据库操作效率。

要安全、徹底地卸載MySQL並清理所有殘留文件,需遵循以下步驟:1.停止MySQL服務;2.卸載MySQL軟件包;3.清理配置文件和數據目錄;4.驗證卸載是否徹底。

C 代碼優化可以通過以下策略實現:1.手動管理內存以優化使用;2.編寫符合編譯器優化規則的代碼;3.選擇合適的算法和數據結構;4.使用內聯函數減少調用開銷;5.應用模板元編程在編譯時優化;6.避免不必要的拷貝,使用移動語義和引用參數;7.正確使用const幫助編譯器優化;8.選擇合適的數據結構,如std::vector。

MySQL函數可用於數據處理和計算。 1.基本用法包括字符串處理、日期計算和數學運算。 2.高級用法涉及結合多個函數實現複雜操作。 3.性能優化需避免在WHERE子句中使用函數,並使用GROUPBY和臨時表。

如何實現鼠標滾動事件穿透效果?在我們瀏覽網頁時,經常會遇到一些特別的交互設計。比如在deepseek官網上,�...

隨著數字貨幣的普及和發展,越來越多的人開始關注和使用數字貨幣app。這些應用程序為用戶提供了便捷的管理和交易數字資產的方式。那麼,數字貨幣app到底是什麼軟件呢?讓我們深入了解,並盤點全球十大數字貨幣app。
