AngularJS $resource УДАЛИТЬ элемент в коллекции

У меня есть контроллер ASP.NET Web Api (1) с действиями GET, POST и DELETE. Я вызываю это из приложения Angular 1.2.0 RC3 с $resource. Назовем контроллер Foos.

Я делаю GET, который возвращает список foos:

GET http://localhost:55386/api/foos/123456/1 HTTP/1.1
Host: localhost:55386
Connection: keep-alive
Accept: application/json, text/plain, */*
Origin: null
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.111 Safari/537.36
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8,es;q=0.6

где находится ресурс

/api/foos/clientId/recordId

Здесь я говорю дайте мне список foos для клиента x и запишите y

Теперь я хочу удалить один foo из списка полученных foo, поэтому я вызываю $delete:

$scope.delete = function(foo){
    foo.$delete();
}

однако это приводит к следующему запросу:

DELETE http://localhost:55386/api/foos/123456/1 HTTP/1.1
Host: localhost:55386
Connection: keep-alive
Accept: application/json, text/plain, */*
Origin: null
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.111 Safari/537.36
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8,es;q=0.6

Это удаление, очевидно, пытается удалить весь список foos, что имеет смысл.

У меня вопрос: как удалить один foo с помощью $resource Angular, не получая каждый foo в своем собственном запросе GET?

ОБНОВИТЬ:

Я мог бы сделать GET /api/foo/1, где ресурс foo/fooId, и его эквивалент DELETE /api/foo/1, чтобы удалить его, но я хочу получить список foos вместо каждого foo по отдельности.


person Sam Leach    schedule 04.11.2014    source источник
comment
localhost:55386/api/foos/123456/1 не имеет clientid=123456 и recordid =1 ?   -  person sylwester    schedule 04.11.2014
comment
так что я немного смущен, что не так?   -  person sylwester    schedule 04.11.2014
comment
Мой вопрос: с $resource, как мне удалить один foo с помощью $resource Angular, не получая каждый foo в своем собственном запросе GET? Я обновил вопрос.   -  person Sam Leach    schedule 04.11.2014
comment
@sylwester, посмотри мой ответ   -  person Sam Leach    schedule 06.11.2014


Ответы (2)


Я знаю, что вопрос не в этом, но вам следует перестроить https://github.com/mgonto/restangular. Легче взаимодействовать с остальными сервисами

person I. YOCK    schedule 04.11.2014
comment
Такс, я проверю. - person Sam Leach; 04.11.2014

Я неправильно понял, как работает $resource. Я предположил, что foo знает, как удалить себя, поскольку это Resource «экземпляр» в следующей функции:

$scope.delete = function(foo){
    foo.$delete();
}

Правильный подход таков:

$scope.delete = function(foo){
    Api.delete({ 
        id: foo.Id, 
        clientId : $scope.clientId, 
        recordId : $scope.recordId 
    });
}

Вы должны вручную указать экземпляру $resource использовать идентификатор foo, чтобы URL-адрес включал идентификатор foo и выполнял следующее DELETE

DELETE http://localhost:55386/api/foos/123456/1/123 HTTP/1.1

где 123 это fooId

person Sam Leach    schedule 06.11.2014