【问题标题】:AngularJS $resource DELETE item in collectionAngularJS $resource DELETE 集合中的项目
【发布时间】:2015-08-28 18:31:36
【问题描述】:

我有一个带有 GET、POST 和 DELETE 操作的 ASP.NET Web Api (1) 控制器。我从带有$resource 的Angular 1.2.0 RC3 应用程序中调用它。让我们调用控制器Foos

我执行了一个返回 foo 列表的 GET:

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

我是说给我一个客户 x 的 foo 列表并记录 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

这个删除显然是想删除整个 foo 列表,这是有道理的。

我的问题是,如何使用 Angular 的 $resource 删除单个 foo 而不在其自己的 GET 请求中获取每个 foo?

更新:

我可以在资源为foo/fooId 的情况下执行GET /api/foo/1,并使用等效的DELETE /api/foo/1 将其删除,但我想获取一个 foo 列表,而不是单独获取每个 foo。

【问题讨论】:

  • localhost:55386/api/foos/123456/1 不是 clientid=123456 和 recordid=1 吗?
  • 所以我有点困惑怎么了?
  • 我的问题是,使用 $resource,我如何使用 Angular 的 $resource 删除单个 foo 而无需在自己的 GET 请求中获取每个 foo?我已经更新了问题。
  • @sylwester,看看我的回答

标签: angularjs rest asp.net-web-api angularjs-resource


【解决方案1】:

我知道这不是问题,但你应该重新调整https://github.com/mgonto/restangular。与休息服务交互更容易

【讨论】:

  • 谢谢,我去看看。
【解决方案2】:

我误解了 $resource 的工作原理。我假设foo 知道如何删除自己,因为它是以下函数中的Resource 'instance':

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

正确的做法是:

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

您必须手动告诉$resource 实例使用 foo 的 id,以便 url 包含 foo id 并执行以下删除

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

其中 123 是 fooId

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-28
    • 2013-07-13
    • 1970-01-01
    相关资源
    最近更新 更多