Je ne comprends pas pourquoi ces choses simples ne sont pas réactives. On dirait que j'ai manqué une partie de la base de Vue.
loading
Echo fonctionne via socket.io et fonctionne correctement. Tous les événements se déclenchent dans le temps.
Sortie de la console une fois connecté:
disconnected
Mais sur la page
loading
Même chose lorsque les déclencheurs sont déconnectés. Dans la console:
connected
Sur la page
<template> <div> {{connection_status}} </div> </template> <script> export default { data() { return { connection_status: 'loading', }; }, created() { Echo.connector.socket.on('connect', function(){ this.connection_status = 'connected'; console.log(this.connection_status ); }); Echo.connector.socket.on('disconnect', function(){ this.connection_status = 'disconnected'; console.log(this.connection_status ); }); }, } </script>
3 Réponses :
Vous devriez utiliser le hook monté () au lieu de celui created () si je comprends bien la documentation: https://vuejs.org/v2/api/#created
Votre problème est que ce
dans la fonction de rappel ne fait pas référence à l'instance de Vue. Vous devriez utiliser une fonction de flèche à la place.
created() { const vm = this; Echo.connector.socket.on('connect', function(){ vm.connection_status = 'connected'; console.log(vm.connection_status ); }); Echo.connector.socket.on('disconnect', function(){ vm.connection_status = 'disconnected'; console.log(vm.connection_status ); }); },
Ou vous pouvez attribuer this
à une variable et l'utiliser dans la fonction de rappel ..
created() { Echo.connector.socket.on('connect', ()=>{ this.connection_status = 'connected'; console.log(this.connection_status ); }); Echo.connector.socket.on('disconnect', ()=>{ this.connection_status = 'disconnected'; console.log(this.connection_status ); }); },
En javascript, une fonction est un objet. L'utilisation de function () {}
définit une nouvelle portée d'objet et donc une nouvelle portée pour this
. Vous affectez la valeur à la propriété connection_status
sur la fonction , pas à votre composant vue.
La meilleure pratique consiste à utiliser les fonctions fléchées, sauf si vous avez besoin d'une nouvelle portée de fonction, car les fonctions fléchées héritent ceci
de la portée dans laquelle elles sont définies.
Echo.connector.socket.on('connect', () => { this.connection_status = 'connected'; console.log(this.connection_status ); }); Echo.connector.socket.on('disconnect', () => { this.connection_status = 'disconnected'; console.log(this.connection_status ); });