Angularjs 如何使用restanglar以整洁的方式执行特定的无父请求?

Angularjs 如何使用restanglar以整洁的方式执行特定的无父请求?,angularjs,rest,restangular,Angularjs,Rest,Restangular,假设我在/users有一个API端点,在/cars有另一个API端点。当然,向其中任何一方发出GET请求都会使所有用户或车辆可用。现在,一个GET/users/74/cars应该返回属于用户74的所有汽车 但我的应用程序有许多与汽车相关的模型,而不仅仅是用户,因此存在更多的端点,如/shops/34/cars和/mechanics/12/cars。为简单起见,我希望所有的PUT/PATCH请求都要发送到主/cars端点 GET /users/74/cars [ { "id": 12

假设我在
/users
有一个API端点,在
/cars
有另一个API端点。当然,向其中任何一方发出
GET
请求都会使所有用户或车辆可用。现在,一个
GET/users/74/cars
应该返回属于用户74的所有汽车

但我的应用程序有许多与汽车相关的模型,而不仅仅是用户,因此存在更多的端点,如
/shops/34/cars
/mechanics/12/cars
。为简单起见,我希望所有的
PUT/PATCH
请求都要发送到主
/cars
端点

GET /users/74/cars

[
  {
    "id": 12,
    "model": "Camaro",
    "make": "Chevrolet",
    "year": 1969,
    "color": "red",
    "odometer": 67294,
    "license": "ABC12345",
    "self": "/cars/12"
  },
  {
    "id": 14,
    "model": "Gallardo",
    "make": "Lamborghini",
    "year": 2015,
    "color": "black",
    "odometer": 521,
    "license": "XYZ34567",
    "self": "/cars/14"
  }
]
在执行保存时,默认情况下,Restangular将向加载项的端点执行
PUT
请求。但这一终点并不存在

它还提供了一个很好的
restanglar.setParentless(['cars'])
方法,该方法将丢弃url的第一部分。但是,我不想在全局范围内这样做,而是专门针对某个特定的元素

neatest实际上是全局执行的,但会针对特定的方法进行限制,例如:
Restangular.setParentless(['cars',['PUT'])

周围有类似的东西吗?还是我把它复杂化了

到目前为止,我尝试了一些我不喜欢的东西:

delete car.parentResource;
我推荐你。自参考链接是一个链接,用于存储项目上应用于
GET
/
PUT
/
DELETE
等的路由,而不是从中提取的URL

例如,更新用户id 74的一辆车的里程数:

首先,配置Restangular以查找每个对象上名为“self”的自链接属性

RestangularProvider.setRestangularFields({
  selfLink: 'self'
});
接下来,打电话叫车。我假设您已经修改了API,以便在每个对象上返回一个名为“self”的属性,该对象具有指向其正确API端点的URL

GET /users/74/cars

[
  {
    "id": 12,
    "model": "Camaro",
    "make": "Chevrolet",
    "year": 1969,
    "color": "red",
    "odometer": 67294,
    "license": "ABC12345",
    "self": "/cars/12"
  },
  {
    "id": 14,
    "model": "Gallardo",
    "make": "Lamborghini",
    "year": 2015,
    "color": "black",
    "odometer": 521,
    "license": "XYZ34567",
    "self": "/cars/14"
  }
]
我们想给其中一个增加一些英里数,然后保存它。整个Restangular代码如下所示:

Restangular.one('users', 74).all('cars').getList().then(function(cars){
    cars[1].odometer = 613;
    cars[1].put();
});

PUT
将转到
/cars/14
,而不是
/users/74/cars/14
。这对于像您这样的应用程序非常有用,这些应用程序将模型关联为图形,而不是严格的层次结构树。

哦,这很好。然而,我不喜欢必须为此更改API的事实。我有三个项目有这个问题,其中一个项目我不能更改API。我猜你的答案是对的。你解决了吗?没有改变。我克隆元素,删除父资源并执行操作。丑陋的。