2017-10-17 1 views
0

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')"

+0

Quelle erreur est-ce? Celui de votre titre ou celui de votre question? – Phil

+1

Votre définition des données est erronée. Vous avez nommé la méthode 'date()' au lieu de 'data()'. – cello

+0

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 –

Répondre

1

Vous avez une faute de frappe: La méthode renvoyant les données doit s'appeler data(), mais vous l'avez appelée date(). En raison d'un mauvais nom, aucun membre de données n'est défini pour le composant vue, et donc this.viz est indéfini, ce qui explique pourquoi le message d'erreur indique que this.viz n'est pas un objet, ce qui devrait être le cas un membre isVisible.