Le code suivant génère une erreur. Je veux avoir un rendu conditionnel concernant la réception d'un événement. J'ai un EventBus dans les main.jsVue.js. Erreur dans le rendu conditionnel. Propriété ou méthode n'est pas définie sur l'instance mais référencée pendant le rendu
window.eventBus = new Vue({})
et quelque part dans le code:
window.eventBus.$emit('change-visibility', true)
Je me attends à déclencher la visibilité du composant suivant Vue:
<template>
<div>
<div v-if="viz.isVisible">
<h2>VISIBLE</h2>
</div>
<div v-else>
<h1>NOT VISIBLE</h1>
</div>
</div>
</template>
<script>
export default {
name: 'test',
date() {
return {
viz: {
isVisible: false
}
}
},
created() {
const self = this;
window.eventBus.$on('change-visibility', status => {
console.log('RECEIVED EVENT', status)
self.setVisability(status)
}),
},
methods: {
setVisability(ok) {
console.log('SET VISABILITY-----------------', ok)
this.viz.isVisible = ok
}
}
}
Erreur:
[Vue warn]: Error in event handler for "change-visibility": "TypeError: undefined is not an object (evaluating 'this.viz.isVisible = ok')"
Quelle erreur est-ce? Celui de votre titre ou celui de votre question? – Phil
Votre définition des données est erronée. Vous avez nommé la méthode 'date()' au lieu de 'data()'. – cello
this.viz.isVisible est indéfini dans le gestionnaire d'événements (dans la méthode setVisability) et dans v-if = "viz.isVisible" aussi "propriété ou méthode" "n'est pas défini –