我正在构建一个聊天应用。问题是,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);
});
你有解决方案吗? 谢谢你们!
答案 0 :(得分:1)
好的,问题是如何定义套接字侦听器。您正在为<{1}} 内的<{1}} 设置事件侦听器,该代码块仅在您开始键入后才会运行。因此,每次开始键入时,都会创建一个新的重复事件侦听器。但是,因为它仅在您开始输入时定义,所以在输入至少一个字符之前,“正在输入...”将不会显示,此时它将开始监听。
答案基本上是将套接字侦听器移到this.socket.on("updateTyping")
函数之外。
userIsTyping()