Dans Vue js, comment attribuer un identifiant unique qui ne se réinitialise pas lors du rechargement de la page
P粉354602955
P粉354602955 2024-01-29 12:23:08
0
1
445

Je développe un petit projet pour apprendre Vue js. Ce devrait être un outil de suivi des habitudes. J'ai actuellement un bug où si vous rechargez la page et ajoutez une nouvelle personnalisation, ma fonctionnalité censée changer l'arrière-plan ne fonctionnera pas correctement.

L'erreur est affichée ici Voici à quoi ressemble mon tableau :

0
: 
{id: 0, title: "1", ready: false}

1
: 
{id: 1, title: "123", ready: false}

2
: 
{id: 2, title: "123", ready: false}

3
: 
{id: 0, title: "123", ready: true}

Je comprends pourquoi ça ne marche pas, car j'utilise un compteur pour attribuer l'identifiant, qui se remet à 0 au rechargement.

<div class="q-pa-md" v-for="(habit, index) in habits" :key="habit.id">
    <q-card class="my-card" :id="habit.id" ref="card">
      <q-card-section>
        <q-checkbox
          id="checkbox"
          v-model="habit.ready"
          @click="changeToTransparent(habit)"
        >
        </q-checkbox>
        {{ habit.title }}

        <q-btn-dropdown flat class="more" icon="more_horiz">
          <q-list>
            <q-item clickable v-close-popup @click="deletehabit(index)">
              <q-item-section>
                <q-item-label>Delete</q-item-label>
              </q-item-section>
            </q-item>

            <q-item clickable v-close-popup @click="edithabitbutton(index)">
              <q-item-section>
                <q-item-label>Edit</q-item-label>
              </q-item-section>
            </q-item>
          </q-list>
        </q-btn-dropdown>
      </q-card-section>
    </q-card>
    <div>

let counter = 0;
const habits = ref([]);


const addHabit = () => {
  
  habits.value.push({ id: counter++, title: habittitle.value, ready: false });
  savetolocalstorage();
  habittitle.value = "";
};

const changeToTransparent = (habit) => {

  if(document.getElementById(habit.id) != null) {
    if (habit.ready) {
    document.getElementById(habit.id).style.backgroundColor =
      "rgba(170,193,200,0.25)";
    savetolocalstorage();
  } else {
    document.getElementById(habit.id).style.backgroundColor = "";
    savetolocalstorage();
  }
  }
 
}

Des idées sur la façon de résoudre ce problème ?

P粉354602955
P粉354602955

répondre à tous(1)
P粉986937457

Vous devez charger le stockage local et définir la longueur sur la valeur du compteur. J'ai fait un exemple fonctionnel ici. J'ai également amélioré votre code pour le rendre plus cohérent avec les concepts de Vue. Comme l'a souligné @Rahul Purohit, JSON.stringify 结果,加载时需要 JSON.parse est requis lors de la sauvegarde.



sssccc
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal