我对学习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/