尝试在 on 事件中检索历史记录消息时,加载时间过长。 旋转器显示并隐藏得太快。但邮件尚未加载。
我们如何计算或获取历史记录加载的确切时间?
$scope.limit = 100
PubNub.ngHistory( {
channel : $scope.channel,
limit : $scope.limit
});
$rootScope.$on(PubNub.ngMsgEv($scope.channel), function(ngEvent, payload) {
**ActivityIndicator.showSpinner();**
$scope.$apply(function(){
$scope.messages.push(payload.message);
});
$(".messages-wrap").scrollTop($(".messages-wrap")[0].scrollHeight);
**ActivityIndicator.hideSpinner();**
});
答案 0 :(得分:4)
非常感谢您尝试使用PubNub AngularJS API!我试试 提供一些帮助。两者之间有一点区别 在这种情况下,PubNub JS API和PubNub AngularJS API。
<强>背景强>
在幕后,PubNub JS API history()
方法立即返回,
并在给定的&#34;页面&#34;时调用回调。恢复了历史。
AngularJS API在寻求简化此交互的过程中没有这样做
接受回调 - 相反,它会为每条消息调用$rootScope.$broadcast()
在返回的历史有效负载中。
在这个版本的AngularJS API中,它目前无法进入&#34;进入内部&#34; &#39; ngHistory&#39;提供回调的方法。但是,有两种解决方案 可供您使用:一个一直在那里,第二个我刚刚添加 根据您的反馈意见。
<强>解决方案强>
1)请参阅此处的codepen(http://codepen.io/sunnygleason/pen/afqmh)。有一个&#34;逃生舱&#34;在PubNub AngularJS API中,它允许您直接调用JS API以用于高级用例,称为jsapi
。你可以致电PubNub.jsapi.history({channel:theChannel,limit:theLimit,callback:theCallback})
。唯一要记住的是,这不会将消息事件触发到$ rootScope中,您需要调用$rootScope.$apply()
或$scope.$apply()
以确保对$scope
所做的任何更改回调函数中的内容会正确传播到视图中。
2)请参阅此处的codepen(http://codepen.io/sunnygleason/pen/JIsek)。如果您更喜欢基于承诺的方法,我只是在PubNub AngularJS API的版本1.2.0-beta.4中添加了ngHistoryQ()
函数。这将允许您编写如下代码:
PubNub.ngHistoryQ({channel:theChannel,limit:theLimit}).then(function(payload) {
payload[0].forEach(function(message) {
$scope.messages.push(message);
}
});
您可以使用&#39; bower install pubnub-angular&#39;安装最新版本的AngularJS SDK。
使用这些解决方案中的任何一种,您都应该能够显示和隐藏您的微调器 因此。唯一的区别在于#2,您将要编写如下代码:
var historyPromise = PubNub.ngHistoryQ({channel:theChannel,limit:theLimit});
showSpinner();
historyPromise.then(function(payload) {
// process messages from payload[0] array
hideSpinner();
});
这有帮助吗?让我知道你的想法。再次感谢您尝试这一点。
答案 1 :(得分:0)
您是否可以在历史记录调用时以编程方式打开微调器,并在回调时以编程方式禁用它?