在我的全局控制器中(在html中分配给body)我有以下代码来获取firebase的快照一次。
ref.once('value', function(snapshot){
var data = snapshot;
}).then(function(data){
$rootScope.content = data.val();
});
我正在使用HTML模板中的内容来呈现它们。我找到的所有问题都导致了"然后"回调中的代码。
我需要做的就是能够抓取一次快照并将其存储在$rootScope.content
并在函数外部访问,即在我的应用中的任何位置。
我很确定这是因为在firebase返回任何内容之前所有内容都会呈现,我只是不确定告诉它等待的最佳方法。
提前谢谢。
答案 0 :(得分:0)
尝试:
ref.once('value', function(snapshot){
$rootScope.content = snapshot.val();
});
或者:
ref.once('value').then(function(snapshot){
$rootScope.content = snapshot.val();
});
来自once()
文档:
返回值 返回一个Promise,可以选择使用它来代替successCallback和failureCallback来处理成功和失败。
答案 1 :(得分:0)
我认为您的第二行var data = snapshot;
可能是问题所在?如果您只想获取整个数据库并将其分配给名为$rootScope.content
的对象或其他任何内容,则以下内容将起作用。我不使用角度,但$rootScope.content
需要是一个对象,而var foo = {}
可以使用snapshot.val()
。请注意snapshot.val()
除了JSON格式的数据之外还有其他内容,您必须通过调用属性名称(密钥)来提取单个节点,例如: snap.val().firstName
获取Bob
。
firebase.database().ref('/').once('value').then(function(snap) {
$rootScope.content = snap.val();
});