get和getList为什么没有相同的单位?

时间:2015-05-06 17:18:43

标签: angularjs rest restangular

在我的申请中,我遇到了以下问题

服务器响应数据

路线/用户

{ 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的答案。

1 个答案:

答案 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'];
});