Что такое 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 и мощная двусторонняя привязка данных делают это ненужным для большинства малых / средних приложений.