在Angular JS中是否有与Backbone's Collection或Ext JS's Store等效的东西?我正在学习$resource,但还没有完全掌握这个方面。
控制器
这样的东西存在吗?$resource文档提到了一个集合,但我并没有真正理解它。这个答案看起来很有希望,但并没有解释集合的概念。是我漏掉了什么还是没有以Angular的方式思考?
补充:
在 MEAN.io 的样板中,文章控制器 建议手动管理“集合”(见下面的
如果这个难以捉摸的“集合”存在,我想他们应该会使用它。相反,他们正在手动管理一个数组。
控制器
// This is the "collection" I'm interested in.
$scope.foos = [];
// Foo is a $resource.
Foo.query(function (foos) {
// This works, but is there a smarter "collection" object?
$scope.foos = foos;
});
$scope.createFoo = function (data) {
var foo = new Foo(data);
foo.$save(function (shinyNewFoo) {
$scope.foos.unshift(shinyNewFoo);
});
};
解释
在 $scope.createFoo
中,我创建了一个新的 Foo,将其持久化,然后将其添加到我的“贫民集合”(即一个数组)中。虽然这样可以正常工作并且视图会正确更新,但我觉得这样做太麻烦了。理想情况下,我希望有一个“集合”,可以自动进行 POST/DELETE 操作。也许可以像下面这样实现。
假装的实现
$scope.fooCollection = new CoolCollection({
// specify the type of resources this collection will contain
itemsResource: Foo
});
// Creates new Foo, saves, adds to collection.
$scope.fooCollection.add(data);
这样的东西存在吗?$resource文档提到了一个集合,但我并没有真正理解它。这个答案看起来很有希望,但并没有解释集合的概念。是我漏掉了什么还是没有以Angular的方式思考?
补充:
在 MEAN.io 的样板中,文章控制器 建议手动管理“集合”(见下面的
splice
)。$scope.remove = function(article) {
if (article) {
article.$remove();
for (var i in $scope.articles) {
if ($scope.articles[i] === article) {
$scope.articles.splice(i, 1);
}
}
} else {
$scope.article.$remove();
$location.path('articles');
}
};
如果这个难以捉摸的“集合”存在,我想他们应该会使用它。相反,他们正在手动管理一个数组。