Table des matières
Pourquoi l'ID est-il unique dans Vue3, mais l'entrée s'affiche en même temps?
Code sous-composant
Code de composant parent
Maison interface Web js tutoriel Comment s'assurer que seul le message actuel affiche la zone d'édition lorsque vous cliquez sur un message différent?

Comment s'assurer que seul le message actuel affiche la zone d'édition lorsque vous cliquez sur un message différent?

Apr 04, 2025 pm 04:51 PM
vue git 工具 ai 点击事件 Pourquoi

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>
Copier après la connexion

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>
Copier après la connexion

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]
Copier après la connexion

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
  }
}
Copier après la connexion

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
  }
}
Copier après la connexion

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

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

Niveaux de force pour chaque ennemi et monstre de R.E.P.O.
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
<🎜>: Dead Rails - Comment apprivoiser les loups
3 Il y a quelques semaines By DDD
Blue Prince: Comment se rendre au sous-sol
3 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

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

Sujets chauds

Tutoriel Java
1655
14
Tutoriel PHP
1252
29
Tutoriel C#
1226
24
Un moyen efficace d'inserter les données dans MySQL Un moyen efficace d'inserter les données dans MySQL Apr 29, 2025 pm 04:18 PM

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.

Comment désinstaller MySQL et nettoyer les fichiers résiduels Comment désinstaller MySQL et nettoyer les fichiers résiduels Apr 29, 2025 pm 04:03 PM

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.

Comment utiliser les fonctions MySQL pour le traitement et le calcul des données Comment utiliser les fonctions MySQL pour le traitement et le calcul des données Apr 29, 2025 pm 04:21 PM

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.

Étapes pour ajouter et supprimer les champs aux tables MySQL Étapes pour ajouter et supprimer les champs aux tables MySQL Apr 29, 2025 pm 04:15 PM

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 le site officiel Deepseek réalise-t-il l'effet de l'événement de défilement de souris pénétrant? Comment le site officiel Deepseek réalise-t-il l'effet de l'événement de défilement de souris pénétrant? Apr 30, 2025 pm 03:21 PM

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, � ...

Quel type de logiciel est une application de devise numérique? Top 10 des applications pour les monnaies numériques dans le monde Quel type de logiciel est une application de devise numérique? Top 10 des applications pour les monnaies numériques dans le monde Apr 30, 2025 pm 07:06 PM

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.

Comment utiliser la sous-requête MySQL pour améliorer l'efficacité de la requête Comment utiliser la sous-requête MySQL pour améliorer l'efficacité de la requête Apr 29, 2025 pm 04:09 PM

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.

Comment analyser le plan d'exécution de la requête MySQL Comment analyser le plan d'exécution de la requête MySQL Apr 29, 2025 pm 04:12 PM

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.

See all articles