Vue+WebSocket 实现页面消息提醒
项目中有些系统消息需要实时提醒,如果数据量不大的情况下可以考虑定时器。页面效果主要代码<script>export default {data() {return {websocket: null,}}, created(){...
·
项目中有些系统消息需要实时提醒,如果数据量不大的情况下可以考虑定时器。
页面效果
主要代码
<script>
export default {
data() {
return {
websocket: null,
}
},
created(){
//页面刚进入时开启长连接
this.initWebSocket()
},
destroyed: function() {
//页面销毁时关闭长连接
this.websocketclose();
},
methods: {
initWebSocket(){ //初始化weosocket
var userId = getSessiontoken('userId');
const wsuri = "ws://114.116.108.246:81/websocket/socketServer?userId="+userId;//连接地址,可加参数
this.websocket = new WebSocket(wsuri);
this.websocket.onopen = this.websocketonopen;
this.websocket.onerror = this.websocketonerror;
this.websocket.onmessage = this.websocketonmessage;
this.websocket.onclose = this.websocketclose;
},
websocketonopen() {
console.log("WebSocket连接成功");
},
websocketonerror(e) { //错误
console.log("WebSocket连接发生错误");
},
websocketonmessage(e){ //数据接收
this.$notify({
title: '系统通知提醒',
message: e.data,
position: 'bottom-right',
duration: 90000,
type: 'warning'
});
},
websocketsend(agentData){//数据发送
this.websock.send(agentData);
},
websocketclose(e){ //关闭
console.log("connection closed (" + e.code + ")");
},
},
}
</script>
数据接收的数据格式为
补充一
数据格式相关
websocketonmessage(e){
console.log("ee",e);
console.log("eeee",e.data);
const redata = JSON.parse(e.data);
console.log("eeee---",redata);
}
补充二
当项目退出时需要关闭所有消息提示框
let notify = this.$notify({
title: '系统通知提醒',
message: redata.message,
position: 'bottom-right',
duration: 0,
type: 'warning',
onClose: function(e){
let param = {
token: getSessiontoken('token'),
messageId: redata.messageId + ''
}
updateMessage(param).then(function (res) {
var obj = JSON.parse(utilFile.decrypt(res.data.a));
}).catch(function (err) {
console.log(err);
})
}
});
this.instanceList[redata.messageId] = notify;
//用instanceList接收所有提示信息,点击退出按钮时,删除所有
var _this = this;
for (let key in _this.instanceList) {
_this.instanceList[key].close();
delete _this.instanceList[key];
}
更多推荐
已为社区贡献27条内容
所有评论(0)