Mah*_*ubi 2 firebase angularfire
我正在寻找一种方法来获取子元素的方法,而不是单独加载该元素.
假设我有一个Post模型,每个帖子都有评论.这就是我获得帖子模型的方法:
var post = $firebase(new Firebase(FIREBASE_URL + "/posts/" + post_name)).$asObject();
Run Code Online (Sandbox Code Playgroud)
每个帖子都有评论,因此我可以使用以下方式访问评论
post.$loaded(function () {
var comments = post.comments;
}
Run Code Online (Sandbox Code Playgroud)
现在,如何将新元素推送到注释,而无需从Firebase单独加载模型?我应该能够做到以下但它不起作用:
comments.$add({text: "Hi, there"});
Run Code Online (Sandbox Code Playgroud)
是否有任何正确的方法来获取子元素的firebase方法,而无需返回服务器并获取注释?
Firebase只会从服务器加载一次数据.之后,您的JavaScript代码可以根据需要在其上构建任意数量的引用,而无需再次下载数据.
但是post.comments.$asArray()不起作用,因为你的帖子是一个普通的JavaScript对象(而不再是$firebase同步).
而是尝试:
var ref = new Firebase(FIREBASE_URL + "/posts/" + post_name);
var post = $firebase(ref).$asObject();
var comments = $firebase(ref.child("comments")).$asArray();
Run Code Online (Sandbox Code Playgroud)
但您可能想重新考虑您的数据结构.尽管Firebase是一个分层数据存储,但他们建议不要构建深层嵌套的层次结构.请参阅https://www.firebase.com/docs/web/guide/structuring-data.html上的避免构建嵌套
因为我们可以嵌套深达32级的数据,所以很容易认为这应该是默认结构.但是,当我们在Firebase中获取节点的数据时,我们还会检索其所有子节点.因此,在实践中,最好保持尽可能平坦,就像构建SQL表一样.
所以在你的情况下,可能导致有两个顶级元素posts和comments.
root
posts
post1
post2
comments
post1
post1comment1
post1comment2
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用以下命令加载帖子及其评论:
var root= new Firebase(FIREBASE_URL);
var post = $firebase(root.child("posts").child(post_name)).$asObject();
var comments = $firebase(root.child("comments").child(post_name)).$asArray();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2230 次 |
| 最近记录: |