vue调用摄像头拍照上传(Vue连接WebSocket后,监听消息并读取消息内容(onmessage事件),解决将内容赋值到data的属性失败的问题)
导读:技术栈 前端Vue (包括一些组件、中间件) 后端分布式微服务...
技术栈
前端Vue (包括一些组件 、中间件) 后端分布式微服务这里就不再详述后端是怎么开发通信服务端的了 ,因为我主要是后端开发 ,前端开发花的时间几乎是后端的两倍还要多(其实比较简单 ,只是自己前端真的不得行🤪)
最近在开发项目里的一个IM(实时通信)模块功能的时候发现 ,通过服务端转发客户端消息的时候 ,前端组件的数据一直没办法正常刷新 ,耗了很久 ,去查结果发现网上都没有我想要的答案(都是千篇一律的答案) ,最后还是没解决 ,那好吧 ,只能🪜看看了
好了 ,不废话了 ,直接上代码解决吧:
原来写法
socket.onmessage = function (event) {...}
新的写法 socket.onmessage = (event) => {...}简单代码演示:
<template> <div> <p>{{tempContent}}</p> </div> </template> <script> export default { name: "Test", data() { return { socket: null, // 这里定义一个变量,因为后面有其他方法也要用到这个socket通道通信 tempContent: Now is null } }, method: { initWebSocket: function() { // 判断浏览器是否支持WebSocket if (window.WebSocket) { // this.GLOBAL.webSocketPath 这是一个全局变量 ,填的就是你的websocket的服务端通信地址 // 例子:this.GLOBAL.webSocketPath = ws://localhost:8080/socket this.socket = new WebSocket(this.GLOBAL.webSocketPath); // 监听消息 ,并将结果映射到对应标签 this.socket.onmessage = function (ev) { // 这里就自己注意转一下哈 console.log("==== onmessage ====") let objTemp = JSON.parse(ev.data); this.tempContent = objTemp.name console.log(objTemp) console.log(this.tempContent) } // 其他那些监听事件就先省略了 } else { console.log("当前浏览器不支持WebSocket"); } }, }, mounted() { this.initWebSocket(); }, } </script>运行后,触发监听事件 ,并没有赋值上
修改代码后
<template> <div> <p>{{tempContent}}</p> </div> </template> <script> export default { name: "Test", data() { return { socket: null, // 这里定义一个变量 ,因为后面有其他方法也要用到这个socket通道通信 tempContent: Now is null } }, method: { initWebSocket: function() { // 判断浏览器是否支持WebSocket if (window.WebSocket) { // this.GLOBAL.webSocketPath 这是一个全局变量 ,填的就是你的websocket的服务端通信地址 // 例子:this.GLOBAL.webSocketPath = ws://localhost:8080/socket this.socket = new WebSocket(this.GLOBAL.webSocketPath); // 监听消息 ,并将结果映射到对应标签 this.socket.onmessage = (ev) => { console.log("==== onmessage ====") let objTemp = JSON.parse(ev.data); this.tempContent = objTemp.name console.log(objTemp) console.log(this.tempContent) } // 其他那些监听事件就先省略了 } else { console.log("当前浏览器不支持WebSocket"); } }, }, mounted() { this.initWebSocket(); }, } </script>原来没有触发时的情况
触发之后
创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!