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。我猜你的答案是对的。你解决了吗?没有改变。我克隆元素,删除父资源并执行操作。丑陋的。