【发布时间】:2014-07-02 07:30:51
【问题描述】:
Angular JS 中是否有与 Backbone's Collection 或 Ext JS's 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 文档提到了一个集合,但我并没有真正明白。 This answer 看起来很有希望,但没有解释收集的想法。我是否遗漏了什么,或者只是没有考虑这种Angular 方式?
附录
在 MEAN.io 样板中,the article controller 建议手动管理“集合”(请参阅下面的 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');
}
};
如果这个难以捉摸的“收藏”存在,我想他们会使用它。相反,他们手动管理数组。
【问题讨论】:
-
为什么? Angular 的一个优点是您可以使用 POJO
-
这样的东西存在吗?不,Angular 没有模型也没有集合。我建议您在问更多问题之前完成文档中的教程。
-
感谢您的回答,@mpm。我已经完成了教程并阅读了所有的开发人员指南,但并不清楚。这就是我问的原因。
-
没有什么能阻止您在 Angular 服务中使用主干模型和集合。拥有一个真正的模型层很重要。将随机哈希发送回服务器不是最佳做法。但是,您需要(在我看来)使用 angularjs ajax api 覆盖主干同步。
标签: javascript angularjs backbone.js-collections angular-resource extjs-stores