Что такое AngularJS эквивалентно коллекциям Backbone?

Есть ли в Angular JS эквивалент Backbone's Collection или Ext JS's Store? Я изучаю ресурс $, но не совсем понимаю этот аспект.

контроллер

// 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 упоминают коллекцию, но я не получил ее. Этот ответ казался многообещающим, но не объяснял идею сбора. Я что-то упускаю или просто не думаю об этом по-английски?


добавление

В шаблоне 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');
    }
};

Если бы эта неуловимая "коллекция" существовала, я думаю, они бы ее использовали. Вместо этого они управляют массивом вручную.

1 ответ

Решение

AngularJS не определяет какую-либо модель структурированных данных. Эта часть полностью зависит от вас.

Служба $ resource - это просто оболочка поверх низкоуровневой службы $ http; он определяет высокоуровневый способ получения ваших данных с сервера и имеет мало общего с тем, как вы структурируете свои данные на веб-интерфейсе.

Если вашему приложению требуется более сложная модель данных внешнего интерфейса, вы должны исследовать другие библиотеки JS или свернуть свои собственные. Однако одноэлементные сервисы Angular и мощная двусторонняя привязка данных делают это ненужным для большинства малых / средних приложений.

Другие вопросы по тегам