IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VueJS Discussion :

Commentaire qui s'affiche dans les autres posts


Sujet :

VueJS

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    En formation
    Inscrit en
    Juillet 2020
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : En formation

    Informations forums :
    Inscription : Juillet 2020
    Messages : 124
    Par défaut Commentaire qui s'affiche dans les autres posts
    Bonjour,

    J'ai créé une méthode afin de récupérer l'id d'un post pour pouvoir y lire les commentaires qui se trouve en dessous.Jusque la tout fonctionne sauf que lorsque je clique sur afficher les commentaires du post 12 par exemple , les commentaires du post 12 s'affichent également sous les autres posts. Qui pourrait regarder mon code afin de me dire ou se situe mon erreur. merci par avance.

    Code des posts :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    <template>
        <div>
            <h2 class="h2_publication">Publications du forum</h2>
            <div>      
                <div id="post" class="allPost" v-for="post in posts"  v-bind:key="post.id_post">
                    <div >
                        <div class="publication" v-if="!deletingPosts.includes(post.id_post)" :key="post.id_post">
                            <div class="bloc_image">
                                <img class="img_post"  v-bind:src= post.imageUrl alt="" >
                            </div>
                            <div class="post-text">
                                <p class="text-user" >{{post.username }} le : {{post.date_post}}</p>
                                <p class="post-user">{{ post.postUser}}</p>
                            </div>
                            <postUpdate v-bind:revele="revele" v-bind:toggleModale="toggleModale"></postUpdate>
                            <button v-on:click="toggleModale(post.id_post)" v-if="post.id_user == id_user"  class="btn-updatePost"><i class="fas fa-pencil-alt"></i>Modifier</button>
                            <button class="btn-deletePost" @click="postDelete(post.id_post)" v-if="post.id_user == id_user" ><i class="far fa-trash-alt"></i>Supprimer</button> 
                            <button class="btn-reply-post" v-on:click="showComments(post.id_post)" v-if="post.id_user == id_user"><i class="fas fa-reply"></i>Répondre</button>
                            <button v-on:click="showComments(post.id_post)"  v-if="post.id_user == id_user"><i class="far fa-comments"></i>Commentaires</button>
                            <div>       
                                <all-comment v-if="showComment"></all-comment>   
                            </div>   
                        </div>
                    </div>
                </div>
            </div> 
        </div>
    </template>
     
    <script>
    import axios from 'axios'
    import PostUpdate from '@/components/posts/PostUpdate.vue'
    import AllComment from '../comment/AllComment.vue'
     
     
     
    export default {
        name: 'AllPost',
        components: {
            PostUpdate,
            //CreateComment,
            AllComment,
        },
        data(){
            return{
                //isDisplay: false,
                deletingPosts:[],
                revele:false,
                posts: [], 
                comment: {},
                id_user : localStorage.getItem('id_user'),
                username : "",
                postUser:"",
                commentUser:"",
                imageUrl :"",
                date_post :"",
                show: false,
                showComment:false,
                id_post:  localStorage.getItem('id_post'),
            }
        },
        beforeMount(){
            let token = localStorage.getItem('token')
            const header = {
                headers: {
                    'Content-type': 'application/json',
                    'Authorization': `Bearer ${token}`
                }
            }
            axios.get('http://localhost:3000/api/posts/', header)
            .then(response =>{       
                console.log(response) 
                this.posts =  response.data.result   
                 
            }).catch((err) => {
                console.log({err: err})
            });
        
        },
        methods:{
          
            showComments: function(comment){
                localStorage.setItem('id_post',comment)
                this.showComment = !this.showComment
                const id_post = id_post;
            },
           
            toggleModale: function(posts){
                localStorage.setItem('id_post', posts)    
                this.revele = !this.revele
                const id_post = id_post;
            },
            postDelete(id_post){
                this.deletingPosts.push(id_post)
                this.id_post = localStorage.setItem('id_post', id_post)
                let id_user = localStorage.getItem('id_user')
                const token = localStorage.getItem('token')
                const headers = {
                    headers: {
                        'Content-type': 'application/json',
                        'Authorization': `Bearer ${token}`
                    }
                };
                axios.delete(`http://localhost:3000/api/posts/delete/${id_user}/${id_post}`, headers )
                .then(response => {
                    console.log(response)
                    this.deletingPosts
                }).catch((error) => {
                    console.log(error)
                })
            },
        }
    }
    </script>

    et voici le code du component commentaire.

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    <template>
        <div>
            <div class="Show-comment"  >
                <div class="all-comment-users">
                    <h2 class="title-comment">Commentaires...</h2>
                    <div v-for="comments in comment" v-bind:key="comments.id_post">
     
     
                        <div class="bloc-comment">  
     
                            <p>{{comments.username}} le : {{comments.date_comment}}</p>
                            <p>{{comments.commentUser}}</p>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </template>
     
    <script>
    import axios from 'axios'
     
    export default {
        name:'AllComment',
        data(){
            return{
                id_user:localStorage.getItem('id_user'),
                id_post:localStorage.getItem('id_post'),
                username:"",
                date_comment:"",
                id_comment:"",
                comment:[],
                posts:[],
                
            }
        },
        beforeMount(){
            let id_post = localStorage.getItem('id_post')
            let token = localStorage.getItem('token')
            const header = {
                headers: {
                    'Content-type': 'application/json',
                    'Authorization': `Bearer ${token}`
                }
            }
           
            let id_user = localStorage.getItem('id_user')
            axios.get(`http://localhost:3000/api/comment/${id_user}/${id_post}/comment`, header)
            .then(response =>{       
                console.log(response) 
               this.comment =  response.data.results    
            }).catch((err) => {
                console.log({err: err})
            });
        },
        methods:{
            
        }
    }
    </script>

  2. #2
    Membre Expert
    Avatar de gwyohm
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2007
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 925
    Par défaut
    ton souci c'est que showComment est un booléen, donc quand il est à true, quel que soit le post dans l'iteration tu affiches le composant des commentaires
    il faut comme avec la suppression, que tu mémorises pour quel(s) posts tu veux afficher les commentaires.
    ensuite le fait que ça affiche les commentaires d'un autre post, c'est pcq tu stocke l'id du post dans le localStorage. il serait plus judicieux que AllComments ait une props postId permettant de spécifier l'id du post pour lequel tu veux les commentaires.

  3. #3
    Membre confirmé
    Homme Profil pro
    En formation
    Inscrit en
    Juillet 2020
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : En formation

    Informations forums :
    Inscription : Juillet 2020
    Messages : 124
    Par défaut
    Merci pour ta réponse @gwyohm, j'ai fais plusieurs essai mais je n'y arrive pas. J'ai rassemblé tout le code sur une même page afin que se soit plus facile à tester. J'ai suivi le même procéder que pour le 'delete' , je selectionne bien un id_post qui correspond au post je reçois également les posts du post sélectionner mais il arrive toujours a s afficher dans les autres posts.

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    <template>
        <div>
            <div class="bloc-fil-actualite">
                <h2 class="h2_publication">Publications du forum</h2>
                <div>      
                    <div id="post" class="allPost" v-for="post in posts"  v-bind:key="post.id_post">
                        <div >
                            <div class="publication" v-if="!deletingPosts.includes(post.id_post)" :key="post.id_post">
                                <div class="bloc_image">
                                    <img class="img_post"  v-bind:src= post.imageUrl alt="" >
                                </div>
                                <div class="post-text">
                                    <p class="text-user" >{{post.username }} le : {{post.date_post}}</p>
                                    <p class="post-user">{{ post.postUser}}</p>
                                </div>
                                <postUpdate v-bind:revele="revele" v-bind:toggleModale="toggleModale"></postUpdate>
                                <button v-on:click="toggleModale(post.id_post)" v-if="post.id_user == id_user"  class="btn-updatePost"><i class="fas fa-pencil-alt"></i>Modifier</button>
                                <button class="btn-deletePost" @click="postDelete(post.id_post)" v-if="post.id_user == id_user" ><i class="far fa-trash-alt"></i>Supprimer</button>
                                <!-- <button @click="showComment = !showComment" >Répondre<CreateComment /></button>  -->
                                <button class="btn-reply-post" v-on:click="showComments(post.id_post)" v-if="post.id_user == id_user"><i class="fas fa-reply"></i>Répondre</button>
                                <!-- <button v-on:click="showComments(post.id_post)"  v-if="post.id_user == id_user"><i class="far fa-comments"></i>Commentaires</button> -->
                                <!-- <button v-on:click="showComments(post.id_post)"  v-if="!vueComment.includes(post.id_post)" :key="post.id_post"><i class="far fa-comments"></i>Commentaires</button> a supprimer si sa fonctionne pas -->
                                <div> 
     
                                    <div class="Show-comment"  >
                                        <div class="all-comment-users">
                                            <h2 class="title-comment">Commentaires...</h2>
                                            <div v-for="comments in comment" v-bind:key="comments.id_post">
                                                <div class="bloc-comment" v-if="!vueComment.includes(post.id_post)" :key="post.id_post">                                    
                                                    <p>{{comments.username}} le : {{comments.date_comment}}</p>
                                                    <p>{{comments.commentUser}}</p>
                                                </div>
                                            </div>
                                        </div>
                                    </div>
                                </div>   
                            </div>
                        </div>
                    </div>
                </div> 
            </div>
        </div>
    </template>
     
    <script>
    import axios from 'axios'
    import PostUpdate from '@/components/posts/PostUpdate.vue'
     
     
     
     
    export default {
        name: 'AllPost',
        props:['id_post'],
        components: {
            PostUpdate,
            //CreateComment,
            //AllComment,
        },
        data(){
            return{
                //isDisplay: false,
                deletingPosts:[],
                revele:false,
                posts: [], 
                comment: {},
                id_user : localStorage.getItem('id_user'),
                username : "",
                postUser:"",
                commentUser:"",
                imageUrl :"",
                date_post :"",
                show: false,
                showComment:[],
                vueComment:[],
                
            }
        },
        beforeMount(id_post){
           
            this.id_post = localStorage.setItem('id_post', id_post)
            let token = localStorage.getItem('token')
            const header = {
                headers: {
                    'Content-type': 'application/json',
                    'Authorization': `Bearer ${token}`
                }
            }
          
            axios.get('http://localhost:3000/api/posts/', header)
            .then(response =>{       
                console.log(response) 
                this.posts =  response.data.result   
                 
                //this.vueComment
            }).catch((err) => {
                console.log({err: err})
            });
        },
        methods:{
            showComments: function(post){
                localStorage.setItem('id_post',post)
                this.showComment = !this.showComment
                //const id_post = id_post;
            },
            selectPost (id_post){
                let token = localStorage.getItem('token')
                const header = {
                    headers: {
                        'Content-type': 'application/json',
                        'Authorization': `Bearer ${token}`
                    }
                }
                //let id_post = localStorage.getItem('id_post')
                let id_user = localStorage.getItem('id_user')
                //console.log(id_post)
                this.vueComment.push(id_post) 
                console.log(this.vueComment)
                axios.get(`http://localhost:3000/api/comment/${id_user}/${id_post}/comment`, header)
                .then((response) => {
                    console.log(response)
                    //this.post = response.data.results
                    
                    this.comment =  response.data.results  
                   // console.log(this.comment)
                    this.vueComment
                    console.log(this.vueComment)
                }).catch((err) => {
                    console.log({err: err})
                });
            },
           
            
            //modale pour modifier un post
            toggleModale: function(posts){
                localStorage.setItem('id_post', posts)    
                this.revele = !this.revele
                const id_post = id_post;
            },
            //suppression d'un post
            postDelete(id_post){
                this.deletingPosts.push(id_post)
                this.id_post = localStorage.setItem('id_post', id_post)
                let id_user = localStorage.getItem('id_user')
                const token = localStorage.getItem('token')
                const headers = {
                    headers: {
                        'Content-type': 'application/json',
                        'Authorization': `Bearer ${token}`
                    }
                };
                axios.delete(`http://localhost:3000/api/posts/delete/${id_user}/${id_post}`, headers )
                .then(response => {
                    console.log(response)
                    this.deletingPosts
                }).catch((error) => {
                    console.log(error)
                })
            },
        }
    }
    </script>

  4. #4
    Membre confirmé
    Homme Profil pro
    En formation
    Inscrit en
    Juillet 2020
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : En formation

    Informations forums :
    Inscription : Juillet 2020
    Messages : 124
    Par défaut
    Je viens de réussir à mettre chaque post a sa place sans afficher dans les autres. Cependant je reçois une erreur qui me dit que les clés sont dupliquées et d'après ce que j'ai pu voir sur internet se serais la clé du v-for qui est en double mais dans mon code j en ai pas 2 pareil.
    J'ai fais comme ça:

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <div> 
                        <div class="Show-comment"  >
                             <div class="all-comment-users">
                                  <h2 class="title-comment">Commentaires...</h2>
                                  <div v-for="comments in comment" v-bind:key="comments.id_post">
                                    <div class="bloc-comment" v-if="post.id_post == comments.id_post">                                    
                                        <p>{{comments.username}} le : {{comments.date_comment}}</p>
                                        <p>{{comments.commentUser}}</p>
                                     </div>
                                  </div>
                                </div>
                            </div>
                       </div>
    Nom : 1.jpg
Affichages : 214
Taille : 195,3 Ko

  5. #5
    Membre Expert
    Avatar de gwyohm
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2007
    Messages
    925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 925
    Par défaut
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <div
      v-for="comments in comment"
      v-bind:key="comments.id_post"
    >
    quand tu itères sur les commentaires tu leur met l'ID de leur post, les clés sont toutes les mêmes

  6. #6
    Membre confirmé
    Homme Profil pro
    En formation
    Inscrit en
    Juillet 2020
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : En formation

    Informations forums :
    Inscription : Juillet 2020
    Messages : 124
    Par défaut
    Merci encore @gwyohm grâce à toi c'est régler

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] référence correspondante qui s'affiche dans une autre fenêtre
    Par lionhigh dans le forum Excel
    Réponses: 0
    Dernier message: 27/03/2014, 11h54
  2. Texte qui s'affiche dans une autre page.
    Par JeanJean75 dans le forum Langage
    Réponses: 19
    Dernier message: 10/01/2010, 10h53
  3. Réponses: 5
    Dernier message: 04/03/2008, 22h22
  4. [Débutant] Faire une boite qui s'affiche sur les autres
    Par Destiny dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 21/08/2007, 09h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo