
一个全局变量 listeners
function onConnNotify() {console.log('onConnNotify4ward');} function jsonpCallback() {console.log('jsonpCallback4ward');} function onMsgNotify() {console.log('onMsgNotify4ward');} function onBigGroupMsgNotify() {console.log('onBigGroupMsgNotify4ward');} function onGroupSystemNotifys() {console.log('onGroupSystemNotifys4ward');} function onGroupInfoChangeNotify() {console.log('onGroupInfoChangeNotify4ward');} function onFriendSystemNotifys() {console.log('onFriendSystemNotifys4ward');} function onProfileSystemNotifys() {console.log('onProfileSystemNotifys4ward');} var listeners = { "onConnNotify": onConnNotify,//监听连接状态回调变化事件,必填 "jsonpCallback": jsonpCallback,//IE9(含)以下浏览器用到的 jsonp 回调函数, "onMsgNotify": onMsgNotify,//监听新消息(私聊,普通群(非直播聊天室)消息,全员推送消息)事件,必填 "onBigGroupMsgNotify": onBigGroupMsgNotify,//监听新消息(直播聊天室)事件,直播场景下必填 "onGroupSystemNotifys": onGroupSystemNotifys,//监听(多终端同步)群系统消息事件,如果不需要监听,可不填 "onGroupInfoChangeNotify": onGroupInfoChangeNotify,//监听群资料变化事件,选填 "onFriendSystemNotifys": onFriendSystemNotifys,//监听好友系统通知事件,选填 "onProfileSystemNotifys": onProfileSystemNotifys//监听资料系统(自己或好友)通知事件,选填 }; 在 Controller 里面调用 webim.login(), 但是监听事件没有执行.
angular.module('app') .controller('AppCtrl', ['$scope', '$translate', '$localStorage', '$window', function( $scope, $translate, $localStorage, $window ) { function webimLogin() { console.log('webimLogin', loginInfo, listeners, options); webim.login( loginInfo, listeners, options, function (resp) { console.log('resp', resp); loginInfo.identifierNick = resp.identifierNick;//设置当前用户昵称 }, function (err) { alert(err.ErrorInfo); } ); } webimLogin(); }]); 但是使用 jQuery 为一个按钮绑定 click 事件, 再在这个 click 事件去调用 webim.login(), 则没有问题.
$('#btn-login').click(function (){ function webimLogin() { console.log('webimLogin', loginInfo, listeners, options); webim.login( loginInfo, listeners, options, function (resp) { console.log('resp', resp); loginInfo.identifierNick = resp.identifierNick;//设置当前用户昵称 }, function (err) { alert(err.ErrorInfo); } ); } webimLogin(); }); 感觉像是作用域的问题, 不知道大家用 AngularJS 整合第三方 SDK 的时候, 是如何解决这类问题的?
1 Fleey 2016-08-23 07:31:59 +08:00 ....我老感觉是你 angularJs 写的问题,我还是第一次看人这样写。你前端部分绑定 ng-click 了么 |
2 beginor 2016-08-23 10:35:37 +08:00 via Android 有些浏览器会奇葩的拦截自动加载数据的请求, 把 wenimLogin() 这句放到 $timeout 里面试试看。 此外, ng 整合第三方类库时, 如果需要更新 dom , 请使用 directive , 否则请使用 service 或者 provider 。 |
4 beginor 2016-08-23 15:33:35 +08:00 via Android 只能说某些奇葩的浏览器会拦截,不是所有的浏览器都会。也可以用 ng1.5 的 component ,这个 component 有生命周期的概念, 可以在 $onInit 方法中做任何事情, 想必已经考虑了这种情况。 |