JSFiddle - React, Tailwind, and code Playground
HTML
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.0-beta.19/angular.min.js"></script>
<script src="https://cdn.firebase.com/js/client/1.0.21/firebase.js"></script>
<script src="https://cdn.firebase.com/libs/angularfire/0.8.2/angularfire.min.js"></script>
<div ng-app="myapp"><div ng-controller="articlesCtrl">
<p>Article controller:</p>
<ul>
<li ng-repeat="article in articles">{{article.getComments()[0].getText()}}</li>
</ul>
</div></div>
JavaScript
var myapp = angular.module('myapp', ['firebase']);
myapp.factory("Article", ["$FirebaseObject", "$firebase", 'Comment', function($FirebaseObject, $firebase, Comment) {
// create a new factory based on $FirebaseObject
var ArticleFactory = $FirebaseObject.$extendFactory({
// these methods exist on the prototype, so we can access the data using `this`
getId: function() {
return this.$id;
},
addComment: function(comment)
{
this.comments[comment.getId()] = true;
comment.setArticle(this);
},
getComments: function()
{
var result = [];
for(var key in this.comments)
if(this.comments.hasOwnProperty(key))
result.push(new Comment(key));
return result;
}
});
return function(articleId) {
var ref = new Firebase("https://hiattp-auth-test.firebaseio.com").child('article/'+articleId);
var sync = $firebase(ref, {objectFactory: ArticleFactory});
return sync.$asObject();
}
}]);
myapp.factory("Comment", ["$FirebaseObject", "$firebase", 'Article', function($FirebaseObject, $firebase, Article) {
var CommentFactory = $FirebaseObject.$extendFactory({
getId: function() {
return this.$id;
},
setText: function(text) {
this.text = text;
return this;
},
getText: function() {
return this.text;
},
setArticle: function(article)
{
this.articleId = article.getId();
},
getArticle: function()
{
return new Article(this.articleId);
}
});
return function(commentId) {
var ref = new Firebase("https://hiattp-auth-test.firebaseio.com").child('comment/'+commentId);
var sync = $firebase(ref, {objectFactory: CommentFactory});
return sync.$asObject();
...