10

Angular JS 中是否有相当于Backbone 的 CollectionExt 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');
    }
};

如果这个难以捉摸的“收藏”存在,我想他们会使用它的。相反,他们手动管理阵列。

4

1 回答 1

4

AngularJS 没有定义任何类型的结构化数据模型。这部分完全取决于您。

$resource 服务只是底层 $http 服务之上的一个包装器;它定义了一种从服务器获取数据的高级方法,与您如何在前端构建数据几乎没有关系。

如果您的应用程序需要更复杂的前端数据模型,您应该研究其他 JS 库或自行开发。然而,Angular 的单例服务和强大的双向数据绑定使得大多数中小型应用程序不需要这样做。

于 2014-07-01T23:30:51.480 回答