Javascript XMPP:AngularJs+;Strophe.js

Javascript XMPP:AngularJs+;Strophe.js,javascript,angularjs,xmpp,strophe,Javascript,Angularjs,Xmpp,Strophe,我有一个基本的XMPP客户端在strophe.js上工作 在登录时,我创建处理程序,例如 connect = new Strophe.Connection('http://localhost/http-bind'); ... ... connect.addHandler(on_message, null, "message", "chat"); connect.addHandler(on_presence, null, "presence"); ... ... 然后我“听”

我有一个基本的XMPP客户端在strophe.js上工作

在登录时,我创建处理程序,例如

connect = new Strophe.Connection('http://localhost/http-bind');
...
...

    connect.addHandler(on_message, null, "message", "chat");
    connect.addHandler(on_presence, null, "presence");

...
...
然后我“听”这些

所以我试着把它“转换”成AngularJS。第一部分相当直截了当。我有一个控制器,可以很好地处理登录部分:

angular.module('app').controller('loginCtrl', function($scope) {
connect = new Strophe.Connection('http://website.com/http-bind');

connect.connect(data.jid, data.password, function (status) {
  if (status === Strophe.Status.CONNECTED) {
    connect.addHandler(on_message, null, "message", "chat");
    connect.addHandler(on_presence, null, "presence");
  }
}
})

但是,我如何在所有控制器的angular(角度)上下文中真正开始收听这些事件(在_消息上,在_在场上)。

在一个。Angular Services旨在作为单例使用,因此您将能够实例化Strophe Service一次,并在任何地方使用它(使用依赖项注入)。

或者您可以为Strophe创建一个模块,然后将该模块包含在您的应用程序中,然后将strophe作为一个变量包含在任何您想要使用它的地方。

如上所述(或下面),我将strophe包装在一个服务中,因此我的登录“机制”如下所示:

.controller('loginCtrl', function(xmppAuth) {

    xmppAuth.auth(login, password);

})
任何我的服务:

.service('xmppAuth', function() {

return {

auth: function(login, password) {
   connect = new Strophe.Connection('http://mydomain.net/http-bind');
   connect.connect(login, password, function (status) {
       if (status === Strophe.Status.CONNECTED) {
           // we are in, addHandlers and stuff
       }
   }
}

}

})

嗨,我正在处理一个类似的问题。你能做到这一点吗?如何做到?您是否考虑过Socket.io而不是Strophe.js,因为Socket.io具有角度包装。
.service('xmppAuth', function() {

return {

auth: function(login, password) {
   connect = new Strophe.Connection('http://mydomain.net/http-bind');
   connect.connect(login, password, function (status) {
       if (status === Strophe.Status.CONNECTED) {
           // we are in, addHandlers and stuff
       }
   }
}

}

})