


Comment s'assurer que seul le message actuel affiche la zone d'édition lorsque vous cliquez sur un message différent?
Pourquoi l'ID est-il unique dans Vue3, mais l'entrée s'affiche en même temps?
Lorsque vous utilisez Vue3 pour développer une fonction d'édition d'enregistrements de chat, nous avons rencontré un problème: bien que l'ID de chaque message soit unique, chaque fois qu'un message différent est cliqué pour l'édition, tous les messages modifiés sont affichés, plutôt que uniquement le message actuellement cliqué affichant la boîte d'édition. Cette question est très déroutante pour moi car je me suis assuré que le MEG_ID pour chaque message est indépendant et que le meg_id est également correctement obtenu lors du clic.
Le problème est décrit comme suit: Ce que je veux réaliser, c'est que lorsque vous cliquez sur le premier message pour l'édition, lorsque vous cliquez sur le deuxième message, la zone d'édition du premier message doit être fermée, et seule la boîte d'édition du deuxième message doit être affichée pour réaliser un effet mutuellement exclusif.
Ce qui suit est le processus de mise en œuvre spécifique:
Code sous-composant
<div class="Chat-Container" v-if="props.dialogData.showeditContent && changegid"> <div class="Chat-Input-box"> <div class="top-box" v-wading="contentloading"> <el-interf id="Chat-Input" autosize v-model="editContent" type="textarea" input="updatecursorposition" click="updatecursorposition" keyup="updatecursorposition" : placeholder="$ t ('text_send_to')"></el-interf> </div> </div> <div class="input-tips"> ESC Key <span class="pub-color"> annuler </span> · Entrez Key <span class="pub-color"> Enregistrer </span> </div> </div> <div v-else: class="['dc-chat-content', props.dialogdata.author.bot? 'dc-chat-bot-content': '']"> <el-popover placement="droite" : visible="toolsVisible" offset="1" show-arrow="false" popper-class="Custom-Popper" t> <div v-if="! props.dialogData.checked" class="plus"> <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 click="handlelect (item.id)"></el-button:> el-tooltip> el-bouton-groupe> </el-tooltip></el-button-group> </div> <p> La partie du script du composant enfant:</p> <pre class="brush:php;toolbar:false"> const props = DefineProps <dcdialogitemprops> () const emit = defineeMits () const Menuiuitems = [ { id: '1', Icône: «fini», Titre: $ t ('text_multiple_choice') }, { ID: '2', Icône: «édition», Titre: $ t ('btn_edit') }, { ID: '3', Icône: 'chatdotsquare', Titre: $ t ('btn_reply') } ]] // Gire l'élément de menu Cliquez sur l'événement const editContent = ref ('') const changegid = ref ('') const CurrentEditing = ref (false) // utilisé pour marquer si le formulaire soumet const hatlesselect = (val: string) => { if (val === '1') { Props.dialogData.checked = true } else if (val === '2') { console.log ('- mancheselect --- 2', props.dialogData); Props.dialogData.isediting = true CurrentEditing.Value = false editContent.value = props.dialogdata.content changelid.value = props.dialogdata.msg_id } EMIT («Menuclick», Val, Prophes.dialogData) }</dcdialogitemprops>
Code de composant parent
<dcdialogitem v-for="item in messagelist" menu-click="handlemeNuclick" class="list-list-item" : key="item.msg_id" dialog-data="item" id="'' msg 'item.msg_id"></dcdialogitem>
Le format de données de Messagelist est le suivant:
[ { "msg_id": "1276491426334769232", "Contenu": "Oh, fort", "Vérifié": faux }, { "msg_id": "1276493284222701702", "Contenu": "Asdasdaasdsadasd", "Vérifié": faux }, ... omis]
La partie de script du composant parent:
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 RépondreAuthor.Value = '' showrecords.value = false DialogData.ShowEditContent = True } else if (val === '3') { showReplymsg.value = true DialogData.ShowEditContent = False RépondreAuthor.Value = DialogData.Author.Username RépondreContent.Value = DialogData.Content } }
Pour résoudre ce problème, la première chose à comprendre est que la propriété ShowItContent est définie dans le composant parent. Lorsqu'un message est cliqué, la fonction HandleMeNuclick définira le CONTENT DIFFICATION du message sur true. Cependant, cela ne ferme pas la boîte d'édition pour d'autres messages.
Pour réaliser un effet mutuellement exclusif, nous devons définir le contenu ShowItSiT de tous les autres messages à FAUX lorsque vous cliquez sur un nouveau message pour l'édition. Vous pouvez modifier la fonction HandlemeNuclick du composant parent, comme indiqué ci-dessous:
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 } else if (val === '2') { Messagelist.value.ForEach ((item) => { item.showEditContent = false }) showReplymsg.value = false RépondreAuthor.Value = '' showrecords.value = false DialogData.ShowEditContent = True } else if (val === '3') { Messagelist.value.ForEach ((item) => { item.showEditContent = false }) showReplymsg.value = true RépondreAuthor.Value = DialogData.Author.Username RépondreContent.Value = DialogData.Content } }
Grâce aux modifications ci-dessus, chaque fois qu'un nouveau message est cliqué pour modifier, la boîte d'édition d'autres messages sera fermée, réalisant ainsi un effet mutuellement exclusif. De cette façon, bien que l'ID soit unique, la boîte d'entrée affiche uniquement la boîte d'édition du message actuellement cliqué comme nous le nous attendons.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds











Méthodes efficaces pour les données d'insertion par lots dans MySQL Incluent: 1. Utilisation d'inserto ... Syntaxe des valeurs, 2. Utilisation de la commande chargedatainfile, 3. Utilisation du traitement des transactions, 4. Ajuster la taille du lot, 5. Désactiver l'indexation, 6. Utilisation de l'insertion ou de l'insert ... onduplicatekeyupdate, ces méthodes peuvent améliorer considérablement l'efficacité du fonctionnement de la base de données.

Pour désinstaller MySQL en toute sécurité et en toute sécurité et nettoyer tous les fichiers résiduels, suivez les étapes suivantes: 1. Stop MySQL Service; 2. Désinstaller les packages MySQL; 3. Nettoyer des fichiers de configuration et des répertoires de données; 4. Vérifiez que la désinstallation est approfondie.

Les fonctions MySQL peuvent être utilisées pour le traitement et le calcul des données. 1. L'utilisation de base comprend le traitement des chaînes, le calcul de la date et les opérations mathématiques. 2. L'utilisation avancée consiste à combiner plusieurs fonctions pour implémenter des opérations complexes. 3. L'optimisation des performances nécessite d'éviter l'utilisation de fonctions dans la clause où et d'utiliser des tables groupby et temporaires.

Dans MySQL, ajoutez des champs en utilisant alterTableTable_namEaddColumnNew_Columnvarchar (255) AfterExist_Column, supprimez les champs en utilisant alterTableTable_NamedRopColumnColumn_to_drop. Lorsque vous ajoutez des champs, vous devez spécifier un emplacement pour optimiser les performances de la requête et la structure des données; Avant de supprimer les champs, vous devez confirmer que l'opération est irréversible; La modification de la structure de la table à l'aide du DDL en ligne, des données de sauvegarde, de l'environnement de test et des périodes de faible charge est l'optimisation des performances et les meilleures pratiques.

Comment réaliser l'effet de la pénétration des événements de défilement de la souris? Lorsque nous naviguons sur le Web, nous rencontrons souvent des conceptions d'interaction spéciales. Par exemple, sur le site officiel Deepseek, � ...

Avec la vulgarisation et le développement de la monnaie numérique, de plus en plus de personnes commencent à faire attention et à utiliser des applications de monnaie numérique. Ces applications offrent aux utilisateurs un moyen pratique de gérer et d'échanger des actifs numériques. Alors, quel type de logiciel est une application de devise numérique? Soyons une compréhension approfondie et faisons le bilan des dix principales applications de monnaie numérique au monde.

Les sous-requêtes peuvent améliorer l'efficacité de la requête MySQL. 1) La sous-requête simplifie la logique de requête complexe, telle que le filtrage des données et le calcul des valeurs agrégées. 2) MySQL Optimizer peut convertir des sous-questionnaires pour des opérations de jointure pour améliorer les performances. 3) L'utilisation existe plutôt que peut éviter plusieurs erreurs de renvoi des lignes. 4) Les stratégies d'optimisation comprennent l'évitement des sous-requêtes connexes, l'utilisation existe, l'optimisation de l'index et l'évitement de la nidification des sous-requêtes.

Utilisez la commande Expliquez pour analyser le plan d'exécution des requêtes MySQL. 1. La commande EXPLIQUE affiche le plan d'exécution de la requête pour aider à trouver des goulots d'étranglement de performances. 2. Le plan d'exécution comprend des champs tels que id, select_type, table, type, possible_keys, key, key_len, ref, lignes et extra. 3. Selon le plan d'exécution, vous pouvez optimiser les requêtes en ajoutant des index, en évitant les analyses de table complètes, en optimisant les opérations de jointure et en utilisant des index de superposition.
