vuejs - 在组件之间共享 websocket 连接
vuejs - share websocket connection between components
开始使用小型 vuejs
应用程序。我如何在根组件中打开一个 websocket 连接并在其他组件中重用相同的连接?
我希望组件能够通过同一连接发送和接收。
这些组件将绑定到路由,以便在根组件和为路由呈现的组件之间没有直接的父子关系。
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>
现在我想在 other-page
中重复使用 ws
,这样每次更改路线时都不会重新连接。
使用 Vue mixin 或插件可以使这变得容易得多,例如:
https://github.com/icebob/vue-websocket
它初始化一个套接字并在所有组件之间共享,还可以轻松地为每个组件添加事件处理程序,从而实现良好的模块化。
如果你不想使用,修改它来使用原生websockets并不是太难socket.io;或者你可以使用这个,虽然我不太喜欢这种语法:
创建新的 js 文件(假设为“/services/ws.js”)。创建 websocket 实例。
const WS = new WebSocket('ws://localhost:8080');
export default WS;
然后在你的 Vue 组件中导入它。
<script>
import WS from '../services/ws';
export default {
// here WS is your websocket instance
}
</script>
这是在组件之间共享数据的最简单方法(这里您只需共享在另一个模块中创建的 WS 实例)。您还可以在其上安装 MVC 样式,将所有逻辑保留在控制器(其他模块)中而不是 Vue 方法中。
开始使用小型 vuejs
应用程序。我如何在根组件中打开一个 websocket 连接并在其他组件中重用相同的连接?
我希望组件能够通过同一连接发送和接收。 这些组件将绑定到路由,以便在根组件和为路由呈现的组件之间没有直接的父子关系。
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>
现在我想在 other-page
中重复使用 ws
,这样每次更改路线时都不会重新连接。
使用 Vue mixin 或插件可以使这变得容易得多,例如:
https://github.com/icebob/vue-websocket
它初始化一个套接字并在所有组件之间共享,还可以轻松地为每个组件添加事件处理程序,从而实现良好的模块化。
如果你不想使用,修改它来使用原生websockets并不是太难socket.io;或者你可以使用这个,虽然我不太喜欢这种语法:
创建新的 js 文件(假设为“/services/ws.js”)。创建 websocket 实例。
const WS = new WebSocket('ws://localhost:8080');
export default WS;
然后在你的 Vue 组件中导入它。
<script>
import WS from '../services/ws';
export default {
// here WS is your websocket instance
}
</script>
这是在组件之间共享数据的最简单方法(这里您只需共享在另一个模块中创建的 WS 实例)。您还可以在其上安装 MVC 样式,将所有逻辑保留在控制器(其他模块)中而不是 Vue 方法中。