【问题标题】:What is the AngularJS equivalent to Backbone's Collections?什么是 AngularJS 等价于 Backbone 的集合?
【发布时间】:2014-07-02 07:30:51
【问题描述】:

Angular JS 中是否有与 Backbone's CollectionExt 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


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2017-11-19
    • 1970-01-01
    • 2016-04-06
    • 2010-11-13
    • 1970-01-01
    • 1970-01-01
    • 2010-10-28
    • 1970-01-01
    • 2014-04-04
    相关资源
    最近更新 更多