我有一个基本的XMPP客户端在strophe.js上工作.
在登录时我创建了诸如的处理程序
connect = new Strophe.Connection('http://localhost/http-bind'); ... ... connect.addHandler(on_message, null, "message", "chat"); connect.addHandler(on_presence, null, "presence"); ... ...
然后我"倾听"那些
function on_presence(presence) { // handling presence } function on_message(presence) { // handling 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"); } } })
但是,我如何实际开始在我所拥有的所有控制器的角度上下文中监听这些事件(on_message,on_presence).
如上所述(或下面提到)我在服务中包装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 } } } } })
在角度服务中包裹Strophe .Angular Services旨在用作单例,因此您将能够实例化一次Strophe服务,并在任何地方使用它(使用依赖注入).