SocketIO不会触发第一个客户端事件

时间:2017-11-20 11:32:59

标签: node.js angular typescript socket.io ionic3

我正在构建一个聊天应用。问题是,socket.io在被解雇时不会emit第一个客户端上的keypress事件。

我用Ionic 3& Angular 5

Here's“bug”

我的view.html

 <p *ngIf="typing == true">... is typing</p>
 <ion-item no-lines>
   <ion-input
       type="text"
       placeholder="Message"
       [(ngModel)]="message"
       (keypress)="userIsTyping()">
   </ion-input>
 </ion-item>

我的观点。

userIsTyping() {
  this.socket.emit('typing');
  this.socket.on("updateTyping", (data) => {
    console.log('typingInSocket = ' + data.isTyping);
    this.typing = data.isTyping;
  });
  console.log('typing = ' + this.typing);

我的server.js

io.on('connection', (socket) => {
  socket.on('typing', () => {
    socket.broadcast.emit('updateTyping', {
      isTyping: true
    });
    setTimeout(() => {
      socket.broadcast.emit('updateTyping', {
        isTyping: false
      });
    }, 2000);
  });

你有解决方案吗? 谢谢你们!

1 个答案:

答案 0 :(得分:1)

好的,问题是如何定义套接字侦听器。您正在为<{1}} 内的<{1}} 设置事件侦听器,该代码块仅在您开始键入后才会运行。因此,每次开始键入时,都会创建一个新的重复事件侦听器。但是,因为它仅在您开始输入时定义,所以在输入至少一个字符之前,“正在输入...”将不会显示,此时它将开始监听。

答案基本上是将套接字侦听器移到this.socket.on("updateTyping")函数之外。

userIsTyping()