我正在与Firebase一起学习AngularJS。我真的很努力与on
Firebase 的回调,并试图更新$scope
…
$apply already in progress <----
var chat = angular.module('chat', []);
chat.factory('firebaseService', function ($rootScope) {
var firebase = {};
firebase = new Firebase("http://gamma.firebase.com/myUser");
return {
on: function (eventName, callback) {
firebase.on(eventName, function () {
var args = arguments;
$rootScope.$apply(function () {
callback.apply(firebase, args);
});
});
},
add: function (data) {
firebase.set(data);
}
};
});
chat.controller ('chat', function ($scope, firebaseService) {
$scope.messages = [];
$scope.username;
$scope.usermessage;
firebaseService.on("child_added",function(data){
$scope.messages.push(data.val());
});
$scope.PushMessage = function(){
firebaseService.add({'username':$scope.username,'usermessage':$scope.usermessage});
};
});
如果我将其$rootscope.$apply
取出,则它可以按预期工作,但不会在页面加载时更新DOM。
谢谢!
更新
解决方案1-移除$rootscope.$apply
服务上的并将其注入并应用于$timeout
控制器:
firebaseService.on('child_added',function(data){
$timeout(function(){
$scope.messages.push(data.val());
},0);
});
解决方案2-实施“ SafeApply”方法(感谢Alex Vanston):
$scope.safeApply = function(fn) {
var phase = this.$root.$$phase;
if(phase == '$apply' || phase == '$digest') {
fn();
} else {
this.$apply(fn);
}
};
尽管它们都可以工作并且代码也不多,但我还是觉得它们太笨拙了。是否有某种正式的Angular方式来处理html" target="_blank">异步回调?
我针对类似情况找到了另一个很好的例子:HTML5Rocks-
AngularJS和Socket.io
解决方案1-删除$ rootscope。$在服务上应用并注入$ timeout并将其应用于控制器:
firebaseService.on('child_added',function(data){
$timeout(function(){
$scope.messages.push(data.val());
},0);
});
解决方案2-实施“ SafeApply”方法(感谢Alex Vanston):
$scope.safeApply = function(fn) {
var phase = this.$root.$$phase;
if(phase == '$apply' || phase == '$digest') {
fn();
} else {
this.$apply(fn);
}
};
主要内容:分离事件类型的回调,分离所有回调本章将向学习如何分离Firebase中的回调。 分离事件类型的回调 下面将分离一个具有值事件类型的函数的回调。 示例 可使用方法,这将删除所有值事件类型的回调。 分离所有回调 当想要分离所有的回调,我们可以使用 -
我的应用程序结构有点乱,但我必须先添加这个补丁,然后我会重新构建整个逻辑。问题是我首先检查是否有Firebase用户,然后如果有,我使用StreamBuilder从FiRecovery获取当前用户配置文件,然后我有_firebaseMessaging.configure方法,因为onLaunch和onResume我使用这个回调: 因为我需要将用户发送到这个屏幕,在那里他从Firebase获取消息。
问题内容: 我正在编写一个函数,该函数采用groupchatID(字符串),并为该群聊返回收件人列表([String])。我正在努力与功能的异步部分。当我运行该函数时,它将正确地将我要查找的用户名数组打印到控制台。虽然,当我调用该函数并尝试打印返回的值时,它始终是一个空数组,因为该函数会在Firebase调用完成之前返回该数组。我正在尝试使用回调,但是我不太了解所有语法。请看一下,让我知道需要更改
当应用程序开始时,我正在从Firebase存储加载一些数据,我正在设置'on成功监听器'和'onFailureListener'以在加载完成时隐藏进度条。问题是:当我离线尝试应用程序时,我根本没有收到回调。我尝试了onCompleteListener,但它也没有被调用它在控制台中给我提供了以下消息: 然后,只要应用程序正在运行,就会显示以下消息: 等待了这么长时间后,它最终给出一个错误并触发“失败
我试图理解一个API参考描述,但我很难理解它的含义: http://mongodb.github.io/node-mongodb-native/2.2/api/Cursor.html#toArray 上面写着 'toArray(回调)- 我知道回调相当于一个“块”,但有一个指向“promise”的箭头符号意味着什么?
回调 用户在支付完成后跳转回来的页面,一般只建议做显示用途。 // SDK实例化,传入公共配置 $pay = new \Yurun\PaySDK\AlipayApp\SDK($params); if($pay->verifyCallback($_GET)) { // 回调验证成功,可以通过GET参数来获取支付宝回传的参数 } else { // 回调验证失败 } 详见:test