如何在 Angular 上使用 Strophe 在聊天中显示 XMPP 消息?
How can I show XMPP messages in a chat using Strophe on Angular?
我正在使用 Angular 10、Strophe.js 和 Openfire 制作消息传递应用程序。我可以连接到服务器,发送和接收消息,但是当我收到它们时,我无法在聊天中显示消息。这是我的代码:
connection.connect(this.doc_name + "@server", 'password', this.onConnect);
onConnect(status) {
if (status == Strophe.Status.CONNECTING) {
console.log('Strophe is connecting.');
} else if (status == Strophe.Status.CONNECTED) {
console.log('Strophe is connected.');
connection.addHandler(reMessage, null, 'message', 'chat', null, null, null);
function reMessage(msg) {
// parse out the from and type attributes of <message>, and the body sub-elements
var from = msg.getAttribute('from');
var type = msg.getAttribute('type');
var elems = msg.getElementsByTagName('body');
if (type == "chat" && elems.length > 0) {
var body = elems[0];
console.log(from);
console.log("The message received is: "+ Strophe.getText(body));
}
var text = Strophe.getText(body);
console.log(text);
this.receiveMessage(text, false, from);
return true;
}
connection.send($pres().tree());
}}
receiveMessage(event: any, reply: boolean, from: any) {
const files = !event.files ? [] : event.files.map((file) => {
return {
url: file.src,
type: file.type,
icon: 'file-text-outline',
};
});
this.messages.push({
text: event.message,
date: new Date(),
reply: reply,
type: files.length ? 'file' : 'text',
files: files,
user: {
name: from,
},
});
}
特别是,我面临的错误是:
TypeError: this.receiveMessage is not a function
我尝试了在本网站和其他网站上找到的许多解决方案,使用箭头函数,.bind()
,由于我是 Angular 的新手,可能以错误的方式使用它们。反正我没有解决我的问题。
我认为这与回调函数和范围有关。
谁能帮帮我?
好的,我终于做到了。对于可能面临相同问题的其他人,我只关注 reMessage 函数,而问题出在 onConnect 函数上,实际上我在该特定函数上使用了 .bind(this)
并且一切正常。
connection.connect(this.doc_name + "@server", 'password', this.onConnect.bind(this));
我正在使用 Angular 10、Strophe.js 和 Openfire 制作消息传递应用程序。我可以连接到服务器,发送和接收消息,但是当我收到它们时,我无法在聊天中显示消息。这是我的代码:
connection.connect(this.doc_name + "@server", 'password', this.onConnect);
onConnect(status) {
if (status == Strophe.Status.CONNECTING) {
console.log('Strophe is connecting.');
} else if (status == Strophe.Status.CONNECTED) {
console.log('Strophe is connected.');
connection.addHandler(reMessage, null, 'message', 'chat', null, null, null);
function reMessage(msg) {
// parse out the from and type attributes of <message>, and the body sub-elements
var from = msg.getAttribute('from');
var type = msg.getAttribute('type');
var elems = msg.getElementsByTagName('body');
if (type == "chat" && elems.length > 0) {
var body = elems[0];
console.log(from);
console.log("The message received is: "+ Strophe.getText(body));
}
var text = Strophe.getText(body);
console.log(text);
this.receiveMessage(text, false, from);
return true;
}
connection.send($pres().tree());
}}
receiveMessage(event: any, reply: boolean, from: any) {
const files = !event.files ? [] : event.files.map((file) => {
return {
url: file.src,
type: file.type,
icon: 'file-text-outline',
};
});
this.messages.push({
text: event.message,
date: new Date(),
reply: reply,
type: files.length ? 'file' : 'text',
files: files,
user: {
name: from,
},
});
}
特别是,我面临的错误是:
TypeError: this.receiveMessage is not a function
我尝试了在本网站和其他网站上找到的许多解决方案,使用箭头函数,.bind()
,由于我是 Angular 的新手,可能以错误的方式使用它们。反正我没有解决我的问题。
我认为这与回调函数和范围有关。
谁能帮帮我?
好的,我终于做到了。对于可能面临相同问题的其他人,我只关注 reMessage 函数,而问题出在 onConnect 函数上,实际上我在该特定函数上使用了 .bind(this)
并且一切正常。
connection.connect(this.doc_name + "@server", 'password', this.onConnect.bind(this));