【发布时间】:2015-05-21 16:00:47
【问题描述】:
我无法使用 angularfire 1.0.0 从我的 Firebase 中获取一件独特的物品。澄清一下,我希望我的应用能够获取给定唯一 Firebase id 的帖子,例如“-JkZwz-tyYoRLoRqlI_I”。它在应用程序中导航时有效,例如单击指向特定帖子的链接,但不单击刷新。我的猜测是它与同步有关。现在它在获取所有帖子并在 ng-repeat 中使用它时工作。这是导航到页面时为什么它适用于一个项目的线索。这可能不难,因为这应该是一个非常标准的操作,但我无法让它工作。我到处搜索,但实际上没有这方面的指南。在 API 中他们引用了$getRecord(key)
从给定键的数组中返回记录。如果没有钥匙 找到,返回null。此方法利用 $indexFor(key) 来查找 适当的记录。
但这并没有按预期工作。还是我错过了什么?
它适用于 ng-repeat,如下所示:
<div ng-repeat="postt in posts">
<div>
<h1>{{postt.title}}</h1>
<div>{{postt.timestamp}}</div>
<div>{{postt.content}}</div>
</div>
</div>
但不适用于像这样的独特物品:
<div>
<h1>{{post.title}}</h1>
<div>{{post.timestamp}}</div>
<div>{{post.content}}</div>
</div>
这是服务:
'use strict';
angular.module('app.module.blog.post')
.factory("PostService", ["$firebaseArray", "FIREBASE_URL", function($firebaseArray, FIREBASE_URL) {
var ref = new Firebase(FIREBASE_URL + "posts");
var posts = $firebaseArray(ref);
return {
all: posts, // ng-repeat on this works fine
last: function(nr) {
var query = ref.orderByChild("timestamp").limitToLast(nr);
return $firebaseArray(query); // ng-repeat on this work fine to
},
create: function (post) {
return posts.$add(post);
},
get: function (postId) {
console.log(postId); // This is -JkZwz-tyYoRLoRqlI_I
var post = posts.$getRecord(postId);
console.log(post); // This print null
return post;
},
delete: function (post) {
return posts.$remove(post);
}
};
}]);
正如 cmets 在 get 函数中所说,postId 在那里,posts 也已设置,但 post 为空。
这是控制器
'use strict';
angular.module('app.module.blog.post', [])
.controller('PostCtrl', ['$scope', '$routeParams', 'PostService', function($scope, $routeParams, PostService) {
// This returns e.g. postId "-JkZwz-tyYoRLoRqlI_I"
console.log($routeParams.postId);
$scope.post = PostService.get($routeParams.postId);
$scope.posts = PostService.all; // Illustrates the example not actually in this controller otherwise
}]);
这是关于 firebase 数据库中内容的示例
<myfirebase>
posts
-JkUnVsGnCqbAxbMailo
comments
content: ...
timestamp: ...
title: ...
-JkZwz-tyYoRLoRqlI_I
comments
content: ...
timestamp: ...
title: ...
-JkhaEf9tQy06cOF03Ts
content: ...
timestamp: ...
title: ...
我觉得这个问题很奇怪,因为它应该很标准。我显然错过了一些东西,但无法解决。非常感谢任何帮助!
提前致谢!
【问题讨论】:
标签: arrays angularjs key firebase angularfire