AngularFire ObjectFactory Childobjects导致循环依赖

时间:2014-10-06 02:52:34

标签: angularjs angularfire objectfactory

使用AngularFire,我正在扩展对象工厂,以便封装数据并允许特定功能,如official tutorial中所述。我有如下数据结构:

{
    'articles': {
        'article-asd876a': {
            title: 'abc',
            text: 'lorem ipsum ...',
            comments: {
                'comment-ad4e6a': true,
                'comment-dsd9a7': true
            }
        }
    },
    'comments': {
        'comment-ad4e6a': {
            text: 'comment text1',
            articleId: 'article-asd876a'
        },
        'comment-dsd9a7': {
            text: 'comment text2',
            articleId: 'article-asd876a'
        }
    }
}

现在我希望能够做到这一点:

var article = new Article(8); // Returns the object created by my object factory, fetching data from firebase
var comments = article.getComments(); // Returns an array of type Comment
var firstText = comments[0].getText();
var article2 = comments[0].getArticle(); // article2 === article

但是在很多层面上我都失败了。其中之一是:在文章中,我只能存储注释ID,因此必须使用新注释(commentId)重新创建注释对象,我需要将注释注入文章。对于Comment来说也是如此,因此我最终得到了一个循环依赖文章 - >评论 - >文章。以下小提琴显示了行为:http://jsfiddle.net/michaschwab/v0qzdgtq/

我做错了什么?对角度来说,这是一个糟糕的概念/结构吗?谢谢!

1 个答案:

答案 0 :(得分:0)

  

我做错了什么?对角度来说,这是一个糟糕的概念/结构吗?   谢谢!

您正在创建循环依赖项。

  

我可以做var Comment = $ injector.get('Comment');为了避免错误,   那是最好的解决方案吗?

我看到两个解决方案: -

1)懒惰的注射液(你自己建议)

这是避免AngularJS中的循环依赖项的最佳解决方案。虽然看看AngularFire文档,但你进入了一个未知的领域,因为AngularFire中的一些东西本质上是实验性的。

这是你的

的工作小提琴
var Comment = $injector.get('Comment');

你基本上懒得注入你的参考文献。

http://jsfiddle.net/yogeshgadge/ymxkt6up/5/

2)模块运行块:

使用此选项,您可以将这些依赖项注入工厂,而不是使用$ injector。