我正在使用AngularFire并且有一个ng-repeat
列表,其中的项目包含特定于该项目“作者”的数据(多个用户可以添加到列表中),例如名称,位置等。我没有将这些数据写入由ng-repeat
迭代的数组中,因为它可能在将来发生变化。相反,特定于作者的数据存储在不同的位置,因此目标是如果作者更改其信息,则所有数据都会反映在列表中。
对于一个人为的例子,想象一下我正在迭代来自不同作者的书籍清单。该列表将包含特定于书籍的数据(例如标题,发布日期等),但我还想在列表中显示作者的信息。我不想直接在书籍数据中包含作者的信息,而是简单地引用该作者ID,并提取他们的个人资料中的任何数据,这样如果他们更改了他们的名字,它将反映他们所有书籍列表中的变化。
这意味着我只能通过模板函数(例如{{getAuthorName(authorId)}}
)对Firebase进行异步调用以检索每个列表项的信息。唯一的问题是它们是异步调用,模板函数在数据可用之前进行评估。
我已经研究过如何完成但尚未找到适合我需要的解决方案。 The answers here似乎很接近,但它们似乎不再适用于Angular> = 1.2.0,并且它们不会考虑为每个模板函数调用返回不同的数据。
更新
这是我现在拥有的JSFiddle。我已经取得了一些进展,但现在返回的所有内容都是预期的promise
对象。我不确定如何在这种情况下实现.then
以获得实际值。
任何帮助都会很棒。
答案 0 :(得分:2)
您可以使用$firebaseObject
然后将其存储在对象中,以确保它不会再被击中。像这样:
var authors = {};
$scope.getAuthorName = function(authorId){
if(!authors[authorId]){
var authorRef = new Firebase(fburl + "/authors/" + authorId);
authors[authorId] = $firebaseObject(authorRef);
}
return authors[authorId];
};
你可以在这里看到工作小提琴:http://jsfiddle.net/0rcdpq47/