页面刷新后,AngularFire $ getRecord返回null

时间:2015-04-17 10:00:47

标签: angularjs firebase angular-ui-router angularfire

我遇到了问题,我不明白为什么会这样。 我的应用程序的一部分是使用AngularFire的博客。访问单篇博文时,我使用$getRecord(key)方法从Firebase检索数据。 通过UI-Router的$stateParams对象检索关键参数。

我能够在post.single.html视图中显示数据,但是当我刷新时,数据消失,$getRecord(Key)返回null,而$stateParams的值是正确的。 这是代码:

/* PostCtrl*/

'use strict';

angular
    .module('meetTerry')
    .controller('PostCtrl',['$scope','$stateParams','BlogFactory', function ($scope,$stateParams, BlogFactory) {
       $scope.data = BlogFactory.loadPost($stateParams.postId);
    }]);

/* BlogFactory*/

'use strict';

angular
    .module('meetTerry')
    .factory('BlogFactory', ['$firebaseArray',function ($firebaseArray) {
        var postRef = new Firebase('https://firebase-forge/posts');
        var postArray = $firebaseArray(postRef);

        /***********************LOAD SINGLE***********************************/

        var _loadPost = function (recordKey) {
            var records = postArray.$getRecord(recordKey);
            return records;
        };

        return {
          loadPost: _loadPost
         }
      }]);
<div class="container" ng-controller="PostCtrl">
    <div class="row">
        <div class="small-12">
            <h1>{{data.title}}</h1>
            <p>{{data.content}}</p>
        </div>
    </div>
</div>

如果有人有线索......

1 个答案:

答案 0 :(得分:4)

从Firebase下载数据后,确保在调用$ getRecord函数时解析了promise,您可以在promise上使用$ loaded()。

   angular
   .module('meetTerry')
   .factory('BlogFactory', ['$firebaseArray', '$rootScope', function ($firebaseArray, $rootScope) {

       var postRef = new Firebase('https://firebase-forge/posts');
       var postArray = $firebaseArray(postRef);
       var obj = $firebaseObject(postRef);  

       obj.$loaded().then(function() { 
          // Broadcast your post and catch up at any controller
          $rootScope.$broadcast('loadPost',postArray.$getRecord(recordKey));               
       });

   }); 

使用$ scope。$ broadcast将触发$ scope范围内的事件。使用$ scope。$ on是我们监听这些事件的方式。现在,您可以通过赶上“loadPost”事件在控制器中使用它。

// listen for the event in the relevant $scope
$scope.$on('loadPost', function (event, data) {
   console.log(data); 
});