在我的申请中,我遇到了以下问题
服务器响应数据
路线/用户
{ data: [
{ id: 5, name: 'peter' },
{ id: 10, name: 'adan' }
] }
route / users / 5
{ data: { id: 5, name: 'peter' } }
case01
Restangular.one('users', 5).get().then(function(user){
$scope.user = user;
});
case02
Restangular.all('users').getList().then(function(users){
$scope.user = users[0];
});
在我的case02中,我可以访问$ scope.user.id,但是在case01中,我有那个要做的事情$ scope.user.data.id(当我在模板中渲染时,我不喜欢什么使用{{user.id}}我可以使用{{user.data.id}})
在我的case02中我可以更改我的数据并使用$ scope.user.save(),但在我的case01中我无法访问此功能
在我的restangular中,当我使用getList时,我将其配置为来自服务器的句柄数据,因为它来自一个对象而不是一个数组
RestangularProvider.setResponseInterceptor(function(response, operation, what) {
if (operation === "getList") {
// from:
// {data: [{ id: 1, name: 'peter' }, { id: 2, name: 'adan' }]}
// to:
// [{ id: 1, name: 'peter' }, { id: 2, name: 'adan' }]
return response.data;
}
return response;
});
所以我不会工作,因为那时我将有一个普通的JS对象而不是Restangular对象,Restangular对象有几个方法,我仍然打算使用相同的$ scope,所以我们想保留它。 / p>
例如: 在一个来自case02咨询(数组)的项目中,我有一个使用Restangular方法的对象: all(),allUrl(),one(),oneUrl(),...以及$ scope.user中我寻找的对象(id,name)的属性。
{
all: function(){...},
allUrl: function(){...},
one: function(){...},
oneUrl: function(){...},
...
id: data_from_user,
name: data_from_user
}
在case01查询(对象)的一个项目中,我有一个对象,其中$ scope.user中的Restangular方法和$ scope.user.data中寻找(id,name)的对象属性。
{
all: function(){...},
allUrl: function(){...},
one: function(){...},
oneUrl: function(){...},
...
data: {
id: data_from_user,
name: data_from_user
}
}
由于这个原因,它不适用于您提供的解决方案,因为可以使用restangular主题,而不是普通JS的对象,但感谢Tim Castelijns的答案。
答案 0 :(得分:0)
if (operation === "getList") {
// from:
// {data: [{ id: 1, name: 'peter' }, { id: 2, name: 'adan' }]}
// to:
// [{ id: 1, name: 'peter' }, { id: 2, name: 'adan' }]
return response.data;
}
return response;
如果operation是getList,则返回response.data
,即
[
{ id: 5, name: 'peter' },
{ id: 10, name: 'adan' }
]
但如果操作不是 getList,则返回response
,这是整个对象,包括 data 子对象
{
data: {
id: 5,
name: 'peter'
}
}
您选择根据操作返回不同的结果,这是您需要对case01执行user.data.id
的原因,因为您将结果分配给user
then(function(user)
,实际上user
表示包含用户的整个数据子对象。
您应该可以通过更改为
来解决此问题Restangular.one('users', 5).get().then(function(response){
$scope.user = response['data'];
});