Angular - 两个(或更多)服务相互依赖

时间:2015-10-29 20:11:40

标签: angularjs factory angularjs-factory

我对学习Angular没什么问题/疑问。

假设我有两家工厂:

UserFactory

module.factory('User', ['$http', '$injector', 'Post', function($http, $injector, Post){
    User.prototype = {
        getPosts: function(){
             **code**
             ** Some Post factory operations (Post.getPostsByUserId(data.id) or something like that)**
        }
    }
}

PostFactory

module.factory('Post', ['$http', '$injector', 'User', function($http, $injector, Post){
    Post.prototype = {
        getUser: function(){
             **code**
             ** Some User factory operations (User.getUserById(data.id) or something like that)**
        }
    }

}

我想我不必说我得到循环依赖错误,但是如何处理这个问题呢? 我想在视野中做这样的事情。

<li ng-repeat="user in users">
    {{ user.name }}<br />
    <div ng-repeat="post in user.getPosts()">
        {{post.title}}
    </div>
</li>

或者第二种方式:

<li ng-repeat="post in posts">
    {{ post.title }}<br />
    {{ post.getUser().name }}
</li>

我也希望在我的模型中进行缓存,因此如果以前使用过,我不必从服务器重新下载数据。 有任何想法吗?或者让我在每个控制器中使用两个工厂。 首先获取用户并在user.posts上进行操作(user.posts是一系列帖子ID)并使用Post.getPostById(id)

我也考虑了$rootScope中的功能:

$rootScope.getUserById();
$rootScope.getPostById();

我会在这些函数中使用我的工厂然后在视图中:

<li ng-repeat="user in users">
    {{ user.name }}<br />
    <div ng-repeat="post in user.posts">
        {{ getPostById(post).title }}
    </div>
</li>

<li ng-repeat="post in posts">
    {{ post.title }}<br />
    {{ getUserById(post.user_id).name }}
</li>

这样做的正确方法是什么? 或者我应该扩展baseController? (我不知道如何在angular和JS中扩展对象/原型)

编辑:摆弄内插错误和循环依赖: http://jsfiddle.net/Hooyek/gxjuoted/

EDIT2:使用$ rootScope工作: http://jsfiddle.net/Hooyek/gxjuoted/4/

0 个答案:

没有答案