Angular JS 中是否有相当于Backbone 的 Collection或Ext JS 的 Store ?我正在学习$resource,但不太了解这方面。
控制器
// 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 时,将其持久化,然后将其添加到我可怜的人的集合中,即一个数组。这有效并且视图已正确更新,但我对此太懒了。理想情况下,我想要一个可以添加和删除的“集合”,它会自动发布/删除。也许像下面这样。
假装实施
$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');
}
};
如果这个难以捉摸的“收藏”存在,我想他们会使用它的。相反,他们手动管理阵列。