从$ rootScope存储和访问快照值

时间:2016-08-11 02:55:13

标签: javascript angularjs firebase firebase-realtime-database angularfire

在我的全局控制器中(在html中分配给body)我有以下代码来获取firebase的快照一次。

ref.once('value', function(snapshot){
    var data = snapshot;
}).then(function(data){
    $rootScope.content = data.val();
});

我正在使用HTML模板中的内容来呈现它们。我找到的所有问题都导致了"然后"回调中的代码。

我需要做的就是能够抓取一次快照并将其存储在$rootScope.content并在函数外部访问,即在我的应用中的任何位置。

我很确定这是因为在firebase返回任何内容之前所有内容都会呈现,我只是不确定告诉它等待的最佳方法。

提前谢谢。

2 个答案:

答案 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();
});