我正在处理一个奇怪的数据模型(此时无处可去)。我使用restangular进行休息调用以获取单个资源对象
通常,restangular返回的资源对象就是我设置的内容 $ scope.resource =响应,我可以在视图/模板中执行resource.name,resource.id等。
除了这组资源而不是返回响应对象中的键值对,它返回一个对象内的对象,如此
resource1: {name: 'value', stuff: 'value', etc}
这很好,因为我只需要在我的控制器中设置$ scope.resource = response.resource1
除了问题是,是否存在5种不同类型的资源对象名称,因此如果我通过id调用创建资源,我可能会返回resource2,resource4,resource1等,因此设置我的$ scope.resource = response.resource1仅在我获得resource1时才有效。
我第一次尝试解决这个问题就是只使用我设置的ng-repeat
<ul ng-repeat="(resource, value) in resource">
<li class="list-group-item">
Name:
<span class="pull-right"> {{ resource.name }} </span>
</li>
</ul>
效果很好,因为restangular返回所有这些额外的东西,它循环遍历每个对象,如果有意义,它会重复一堆空白的HTML内容。
我的另一个想法是尝试制作一个常量并制作一个拥有全部5个资源的对象,我的ng-repeat只会根据该常量对象填充(即:它会检查那些字符串&#34; resource1, resource2等等#34;如果有,那么它将填充模板。但我不确定如何做到这一点。
任何其他选项或是否有重复功能我只是没有使用?任何帮助谢谢
答案 0 :(得分:1)
这是我将要工作的example。最初你的传入数据看起来像我相信......
$scope.data = [
{
resource1 : { name: 'r1' }
},
{
resource2 : { name: 'r2' }
},
{
resource2 : { name: 'r2' }
}];
当您收到数据时,您可以通过将其展平为以下结构来对其进行标准化...
$scope.normalized = [
{ name : 'r1' },
{ name : 'r2' },
{ name : 'r2' }
];
或者您可以为对象“type”添加公共字段
$scope.expanded = [
{
type : 'resource1',
resource1 : { name: 'r1' }
},
{
type : 'resource2',
resource2 : { name: 'r2' }
},
{
type : 'resource2',
resource2 : { name: 'r2' }
}];
或者您可以规范化但保留类型数据......
$scope.normalizedType = [
{ type : 'resource1', name : 'r1' },
{ type : 'resource2', name : 'r2' },
{ type : 'resource2', name : 'r2' }
];
在检索数据时进行规范化可能是您最好的选择。那么问题就是你需要保留对象类型信息。
答案 1 :(得分:0)
我提出的另一个解决方案是将所有资源键名称放入列表
resources = ['resource1', 'resource2', 'resource3', 'etc..']
在我的restangular服务承诺中,我刚刚检查了像这样的for循环的资源编号
return ResourceRestangular.all('resource').get(resourceId).then(function(response){
for (i = 0; i < resources.length ; i++){
if (resources[i] in response){
self.resource = response[resources[i]];
}
}
return self.resource;
不再需要ng-repeat!