我遇到了问题,我不明白为什么会这样。
我的应用程序的一部分是使用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>
如果有人有线索......
答案 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);
});