vuejs - Anteil websocket-Verbindung zwischen Komponenten
Erste Schritte mit einem kleinen vuejs
Anwendung. Wie öffne ich eine websocket-Verbindung, sagen wir mal in den root-Komponente und die Wiederverwendung der gleichen Verbindung, die in anderen Komponenten?
Ich möchte Komponenten in der Lage sein zu senden und empfangen über die selbe Verbindung.
Diese Komponenten sind gonna gebunden werden, um Strecken, so dass es keine geraden Eltern - Kinder-Beziehung zwischen der Stamm-Komponente und die Komponente gerendert für eine route.
App.vue:
<template>
<div id="app">
<h1>My app</h1>
<router-link to="/">P&L</router-link>
<router-link to="/other-page">other page</router-link>
<router-view></router-view>
</div>
</template>
<script>
export default {
name: 'app',
data () {
return {
ws: null
}
},
created () {
this.ws = new WebSocket('ws://localhost:8123/ws')
},
methods: {
}
}
}
</script>
Jetzt würde ich gerne wiederverwenden ws
im other-page
als nicht verbinden jedes mal, wenn ich die route ändern.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Führen Sie es durch die
router-view
.In jeder Seite Komponente,
Alternativ verwenden Sie ein globales Geschäft wie Vuex oder eine eigene Kreation.
Erstellen Sie neue js-Datei (sagen wir mal "/services/ws.js"). Erstellen Sie eine Instanz des websocket.
Und dann in Ihre Vue-Komponente zu importieren.
Dies ist die einfachste Möglichkeit zum freigeben von Daten zwischen den Komponenten (hier einfach teilen, WS-Instanz erstellt, in einem anderen Modul). Sie können auch passen MVC-Stil auf Sie, und halten alle Logik in Controllern (andere Module) anstelle von Vue Methoden.
Mithilfe einer Vue mixin-oder Plug-in macht dies viel einfacher, wie diese:
https://github.com/icebob/vue-websocket
Es initialisiert einen socket und teilt sich unter alle Komponenten, auch die einfache Möglichkeit, hinzufügen von Ereignis-Handlern pro Komponente, so dass Sie bekommen eine gute Modularisierung.
Es ist nicht allzu schwer zu modifizieren, verwenden Sie das native websockets, wenn Sie nicht verwenden möchten Buchse.io; oder Sie können diese benutzen, obwohl ich nicht wie die syntax so viel:
https://www.npmjs.com/package/vue-native-websocket