【发布时间】:2017-11-23 22:34:16
【问题描述】:
我正在构建一个聊天应用程序。问题是,socket.io 在第一个客户端上触发时不会 emitkeypress 事件。
我用Ionic 3 & Angular 5 构建了这个
Here's“错误”
我的观点.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>
我的观点.ts
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);
});
你有什么解决办法吗? 谢谢你们!
【问题讨论】:
-
如果点击进入每个屏幕的输入框,不输入任何内容,然后回到第一个,是否有效?在我看来,除非您将焦点放在窗口中,否则客户端 socket.io 不会连接。我觉得奇怪的是
typing=false出现在左侧窗口中而不是右侧。我也觉得这很奇怪,因为我认为到目前为止还没有按键 -
@MattFletcher "typing=false" 出现在第一个按键上,gif 跳过 1 秒的开始 :x 我希望这只是一个窗口焦点问题,但这不是问题。我过去一整天都没有解决办法,我很难过
-
哦,我刚刚意识到它是什么......
标签: node.js angular typescript socket.io ionic3