Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js SocketIO不触发第一个客户端事件_Node.js_Angular_Typescript_Socket.io_Ionic3 - Fatal编程技术网

Node.js SocketIO不触发第一个客户端事件

Node.js SocketIO不触发第一个客户端事件,node.js,angular,typescript,socket.io,ionic3,Node.js,Angular,Typescript,Socket.io,Ionic3,我正在构建一个聊天应用程序。问题是,socket.io在触发时不会在第一个客户端上发出keypress事件 我用爱奥尼亚3号&Angular 5号 “错误” myview.html <p *ngIf="typing == true">... is typing</p> <ion-item no-lines> <ion-input type="text" placeholder="Message" [(n

我正在构建一个聊天应用程序。问题是,
socket.io
在触发时不会在第一个客户端上发出
keypress
事件

我用爱奥尼亚3号&
Angular 5号

“错误”

myview.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>
myserver.js

io.on('connection', (socket) => {
  socket.on('typing', () => {
    socket.broadcast.emit('updateTyping', {
      isTyping: true
    });
    setTimeout(() => {
      socket.broadcast.emit('updateTyping', {
        isTyping: false
      });
    }, 2000);
  });
你有什么解决办法吗?
谢谢你们

好的,问题是如何定义套接字侦听器。您正在将
this.socket.on(“updateTyping”)
的事件侦听器设置在只在开始键入时运行的代码块中。因此,每次开始键入时,都会创建一个新的重复事件侦听器。但是,因为它仅在您开始键入时定义,“正在键入…”将不会显示,直到您至少键入一个字符,此时它将开始侦听

答案基本上是将套接字侦听器移到
userIsTyping()函数之外

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

userIsTyping() {
  this.socket.emit('typing');
}

如果你点击每个屏幕的输入框,不输入任何内容,然后返回到第一个屏幕,它工作吗?在我看来,client socket.io在您将焦点放入窗口之前不会连接。我觉得奇怪的是,
typing=false
出现在左侧窗口,而不是右侧。我也觉得很奇怪,因为我认为根本没有按键far@MattFletcher“typing=false”出现在第一次按键时,gif跳过了start:x的1s,我希望这只是一个窗口焦点问题,但这不是问题所在。我一整天都在这上面,没有解决办法。我太悲伤了。我刚刚意识到这是什么。。。
this.socket.on("updateTyping", (data) => {
  console.log('typingInSocket = ' + data.isTyping);
  this.typing = data.isTyping;
});

userIsTyping() {
  this.socket.emit('typing');
}