Se connecter

Informatique

Programmation

Sujet : faire un compteur de like en Ionic
1
coquine_93
Niveau 7
24 mars 2019 à 18:18:36

Bonjour,

J'ai une bdd en real time database:
https://www.noelshack.com/2019-12-7-1553447693-capture-d-ecran-2019-03-24-a-18-14-34.png

J'ai une page product, j'ai une interface sneakersCreds avec brand, name , price.. , une SneakersListService avec une reference à ma liste private sneakRef = this.db.list<sneakersCreds>('sneakers-list');
puis un provider aussi ayant une reference à la sneakers-list et aux /users (tjrs dans la réal time Database)

Sur ma page product j'ai un attribut 'like', je souhaite que des que l'user clique dessus ça mette un like+1

Pouvez vous me lancer vers la bonne voie ? svp

Merci :-d

coquine_93
Niveau 7
24 mars 2019 à 18:30:25

Pour info depuis mes recherches j'ai tenté cela :

on click du btn j'appelle : incrementLike

j'ai :
incrementLike() { this.s.increaseLike(this.sneak).then((res: any) => { }) }

et increaseLike dans SneakersListService :
increaseLike(s) { return this.sneakRef.push(s.like+1); }

C'est très hasardeux ce que je fais car je ne comprends pas bien.. Et souvent de plus j'ai sneak.like undefined is not an object..

UndeadMarston6
Niveau 10
25 mars 2019 à 13:21:12

Si tu es avec Firebase, je te conseille de check cette page : https://firebase.google.com/docs/database/web/read-and-write

Si tu bind ta donnée correctement, t'auras juste à modifier ton document sur ta BDD pour avoir la valeur qui se met à jour automatiquement. :noel:

J'ai jamais fais du ionic mais ça reste du JS donc ça devrait le faire. :noel:

dark_drow
Niveau 15
25 mars 2019 à 13:31:05

juste un conseil, appelle pas tes variables "s", appelle ça "sneak" ou "sneakService". Déjà sur un court extrait tu appelles deux variables "s" qui sont totalement différentes et c'est pas agréable à relire :)

sneak.like undefined is not an object..

Probablement que tu as mal initialisé ton objet snake dans ton interface ?

return this.sneakRef.push(s.like+1);

Si je déduit bien, this.sneakRef c'est une liste de Sneak, mais tu pousse un entier dedans ? c'est pas plutôt quelque chose comme ça ?
s.like = s.like+1
this.sneakRef.push(s)

coquine_93
Niveau 7
29 mars 2019 à 00:52:44

slt et merci de vos réponses (désolé pour le temps de réponse anormalement long)

J'ai suivi ce que tu m'as dis @dark_drow -->

j'ai ma premiere méthode (on click du btn de like de la page html)
incrementLike1() { //this.s.increaseLike(this.sneak, this.sneak.uid); this.sp.increaseLike(this.sneak); }

puis

  increaseLike(sneak) {
    var promise = new Promise((resolve, reject) => {
      this.firedataSneakers.update({

        like : sneak.uid.like = sneak.uid.like += 1

      }).then(() => {
        resolve(true);
      }).catch((err) => {
        reject(err);
      })
    });
    return promise;
  }

}

J'ai testé plusieurs scénario et il me semble que le pb vienne du :
like : sneak.uid.like = sneak.uid.like += 1

car j'ai testé il a pu ajouté un +1 mais pas dans le bon id de l'objet (à la place il en a créer)

Merci :-d

coquine_93
Niveau 7
31 mars 2019 à 22:30:14

finalement ce que je croyais fonctionnel ne l'est pas ..

J'essaye de récupérer le uid (la clé) d'un item de ma bdd (sneaker-list) en vain..

Ce que j'ai tenté c'est au moment d'ajouter un élément dans la bdd, je set mon attribut 'uid' comme ca :
s.uid = firebase.database().ref('/sneakers-list/').orderByKey().toString();

ou encore
s.uid = firebase.database().ref('/sneakers-list/').key;

aucun ne récupère la clé de mon item...

Je sens qu'il me suffit d'avoir ca pour que le reste fonctionne

1
Sujet : faire un compteur de like en Ionic
   Retour haut de page
Consulter la version web de cette page