Maison  >  Questions et réponses  >  le corps du texte

Utilisez Vue et axios pour mettre à jour les données sans actualiser la page

<p>J'ai une page avec 2 onglets (Questions et Données) réalisée sur Vue et Axios. Dans le premier onglet, je remplis le formulaire et je le soumets - bouton Enregistrer <strong>v-on:click="save"</strong>. </p> <pre class="brush:php;toolbar:false;">save : function() { axios({ méthode : 'patch', URL : URL, données : this.data }) .then(fonction (réponse) { this.data = réponse.data; }</pré> <p>Dans le deuxième onglet (Données), j'ai une liste de données enregistrées : </p> <pre class="brush:php;toolbar:false;">monté() { axios .get('/api/recommended-products/?patient_uuid=' + '{{patient.uuid}}') .then(response => (this.data= réponse.data.results)) }</pré> <p>Maintenant, lorsque je modifie la réponse dans l'onglet Questions, la liste dans l'onglet Données devrait changer automatiquement. Si j'actualise la page, cela change - Mounted() fonctionne. J'ai essayé de créer la fonction <strong>updateList()</strong> <pre class="brush:php;toolbar:false;">updateList: function() { axios .get('/api/recommended-products/?patient_uuid=' + '{{patient.uuid}}') .then(response => (this.data= réponse.data.results)) }</pré> <p>et ajoutez-le à la fonction <strong>save()</strong>, par exemple : </p> <pre class="brush:php;toolbar:false;">save : function() { axios({ méthode : 'patch', URL : URL, données : this.data }) .then(fonction (réponse) { this.data = réponse.data; this.updateList(); }</pré> <p>Le problème est que cette méthode fonctionne une deuxième fois (parfois cela fonctionne et parfois non). Je viens donc d'ajouter <strong>location.reload();</strong> à <strong>save()</strong> mais je n'aime pas cette approche. Est-il possible de mettre à jour la liste des données sans actualiser la page ? Qu'est-ce que je fais de mal avec la fonction <strong>updateList()</strong> </p>
P粉614840363P粉614840363397 Il y a quelques jours500

répondre à tous(1)je répondrai

  • P粉949267121

    P粉9492671212023-08-26 11:52:00

    À mon avis, vous devriez utiliser vuex et son getter.

    De cette façon, vous n'avez qu'une seule demande pour toutes vos applications et les données sont automatiquement actualisées une fois le statut mis à jour.

    Vous pouvez ensuite accéder aux données en utilisant la propriété 计算 qui sera automatiquement restituée lorsque l'état sera mis à jour.


    Voici un exemple d'utilisation de plusieurs onglets : https://codesandbox.io/s/vuex-axios-demo-forked-m0cqe4?file=/src/App.vue

    Dans cet exemple, je charge les informations de publication via l'API JsonPlaceHolder.

    Renvoyez le formulaire à chaque fois (en utilisant la fonction). Appelez l'opération de magasin, puis mettez à jour l'état, déclenchant ainsi le getter pour restituer les données.

    Remarque : j'ai chargé le premier message dans Mounted avec une valeur par défaut de 1.

    répondre
    0
  • Annulerrépondre