【发布时间】:2014-08-13 11:09:18
【问题描述】:
我在 firebase 中有一些如下所示的数据:
|
|
--users
|
--1
|
--email:"hello@gmail.com"
--name:"User 01"
--2
|
--email:"hello2@gmail.com"
--name:"User 02"
--chat
|
---JU9ZpBj7P9dWgNYN4To
|
--email:"hello@gmail.com"
--content:"Hi, i'm user 01! How are you?"
--user:"1"
--timestamp:"123456789"
---JX8ZpBnli7hliwehlfi
|
--email:"hello2@gmail.com"
--content:"Hi, i'm user 02! I'm great thanks!"
--user:"2"
--timestamp:"123456789"
我在一个名为“消息”的对象中从 firebase 获取聊天数据,我的 HTML/angular 看起来像这样:
<ul class="chat" ng-repeat="message in messages | orderByPriority | reverse">
<li>
<strong>{{message.user | uid2name}}</strong> {{message.content}}
</li>
</ul>
所以我想做的是获取 message.user 并将其从用户 ID 转换为名称。我想一个好方法是使用过滤器:
.filter('uid2name', function(loginService, $rootScope) {
// Takes a userid and outputs a users name
return function(input) {
var ref = new Firebase('https://<myapp>.firebaseio.com/users/' + input);
return $firebase(ref).name;
};
})
现在这很好用,但它实际上是通过每秒多次轮询 firebase 来实现的——这根本不是我想要做的。我曾考虑在 $rootScope 中缓存响应,但这似乎有点草率。最好的方法是什么?我对任何想法持开放态度,我不喜欢使用过滤器的想法。
【问题讨论】:
标签: angularjs firebase angularfire