- Ymox,
Bonsoir
Je bidouille avec Vue.js en ayant repris un vieux projet sous Nuxt 2. Le projet étant un peu trop conséquent pour être migré actuellement, je tente de me familiariser avec les concepts en espérant que cela ne pose pas de problème pour passer à une version plus récente du framework. En plus de cela, je constate des différences de comportement entre un lancement de débogage de l’application et un lancement "production". Ajouter encore que le principe des Promise avec async
et await
n’est probablement pas complètement maitrisé… me voici.
Dans le cas qui m’occupe, je dois notamment gérer des rôles afin d’afficher ou non une nouvelle option de navigation, en attaquant une pseudo-API pour récupérer lesdits rôles. J’ai déjà ce genre de fonctionnalité pour des éléments qui sont rendus "plus tard" basés sur d’autres données asynchrones, mais je bloque sur quelque chose qui doit être pris en compte plus tôt dans le déroulé, et qui ne se comporte pas comme je m’y attendrais.
Concrètement, j’ai le code suivant — un peu simplifié évidemment.
<template>
<v-row v-if="list.length > 0 && canExport" data-etc >
<a …>Exporter</a>
</v-row>
</template>
<script>
new Vue({
data: {
list: [],
roles: [],
},
methods: {
canExport: function() {
return roles.length > 0 && roles.some('EXPORT');
}
// une autre méthode très similaire sur un autre tableau aussi dans data
},
async created() {
await this.$store.dispatch('getRoles').then((roles) => {
this.roles = roles || [];
});
// un autre appel, différent du fait du paramètre de dispatch() et de la propriété
// dans laquelle le retour est enregistré. C'est bien la même propriété que celle
// mentionnée ligne 17. Permuter les appels ne change rien.
}
});
</script>
En lançant mon application "en mode débogage", je n’ai aucun problème, tout roule. Si je lance npm run build
et que je lance "en mode production", par contre…
L’application n’arrive pas à compléter son initialisation.
nuxt DOMException: Node.appendChild: Cannot add children to a Comment
J’ai tenté de jouer avec les différents événements disponibles de Nuxt, comme beforeMount()
, mounted()
, mais surtout fetch()
, qui permet un rendu et une utilisation pratiquement correcte. Pratiquement, parce qu’il me faut passer à une autre page et revenir sur celle qui me préoccupe (c’est la page d’accueil) pour que, cette fois, le bouton d’export s’affiche avec le contenu de la liste. Parce que la requête à l’initialisation ne semble pas remplir roles
si j’en crois les outils de débogage. Par contre, je ne comprends pas pourquoi partir et revenir sur la page hydrate la propriété.
Je suis conscient que le problème peut venir de plusieurs points, mais là, j’aurais besoin d’un œil externe pour me réorienter et m’expliquer pourquoi ça ne fonctionne pas avec ce que j’ai, un peu naïvement certes, copié pour adapter.
Merci d’avance