websocket站内信功能问题 vue

我现在在用websocket做个简单的站内信聊天功能,现在有个问题不好解决,就是离线消息接收和未读消息提醒

<div class="subordinate">
<!-- 这是渲染的好友列表 -->
    <ul>
        <li v-for='(item,index) in subordinatelist' :key="index" @click="test(index,item)" :class="{on:activeButton==index ,'one':!index }">
            <!-- 这是好友头像姓名 -->
            <img :src="item.User.UserPic">
            <h3 class="down_name">{{item.User.Username}}</h3>
        </li>
    </ul>
</div>
<div class="right_top">
<!-- 聊天界面 -->
    <h4 class="chat_record">与{{item.User.Username}}聊天中<a @click="chatRecord(item)">(查看聊天记录)</a></h4>
    <div class="box_bd" id="content">
        <ul>
            <li class="message clearfloat" v-for='(item1,index) in infoList[item.User.Username]' v-if="infoList != null">
                <div class="mytime"><span>{{myDate | moment("HH:mm:ss")}}</span></div>
                <div class="mes_box">
                    <div class="message_p">
                        <!-- 自己发送的消息 -->
                        <div class="clearfloat mes_p_1" v-if="item1.myChat != null">
                            <div class="mes_p_2">
                                <p v-html="item1.myChat"></p>
                            </div>
                        </div>
                        <!-- 对方发送的消息 -->
                        <div class="clearfloat mes_p_3" v-if="item1.heChat != null">
                            <div class="mes_p_4">
                                <p v-html="item1.heChat"></p>
                            </div>
                        </div>
                    </div>
                </div>
            </li>
        </ul>
    </div>
</div>
created() {
  this.$post('/chat', { token: this.token }).then(res => {
    this.subordinatelist = res.info.UserList
       for (let j = 0; j < this.subordinatelist.length; j++) {
           this.infoList[this.subordinatelist[j].User.Username] = []
    }
  })
},

先从接口调出所有好友的列表,在用循环给 this.infoList这个数组加用户名作为下标
this.message是输入的内容,直接push进infoList的myChat中显示在界面上

let messageMyChat = { myChat: this.message }
this.infoList[this.userName].push(messageMyChat)

isChat是websocket.vue传过来的值,message2就是对面发送的内容

watch: {
  isChat(Val, oldVal) {
    this.message2 = Val.Content
    this.sendChat()
  }
},

我用上文相同的方法直接push进infoList的heChat中显示在界面上

sendChat() {
   let contentLsit = this.message2.split(",")
   this.infoList[contentLsit[0].trim()].push({ heChat: contentLsit[1].trim() });
      //使滚顶条保持最低
   this.nextTick()
    }
阅读 2.9k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题