[英]Getting object property in JavaScript
我有一个来自API这样的get请求的对象:
var object = {
"number": 0,
"size": 9999,
"totalPages": 0,
"numberOfElements": 1,
"totalElements": 1,
"content": [{
"id": 26,
"name": "New York",
"acronym": "SP",
"country": {
"id": 33,
"name": "United States",
"acronym": "US"
}
}]
}
如果要获取国家/地区名称,则需要执行以下操作:
object.content[0].country.name or object["content"][0]["country"]["name"]
但是,我试图通过ng重复访问我在控制器中传递的那些属性,以便概括我的控制器。
在控制器内部,我有:
$scope.$parent.fields = ["acronym", "name", "country.name"];
$scope.columns = [
{
field: $scope.fields[0],
"class": 'col-sm-1'
}, {
field: $scope.fields[1],
"class": 'col-sm-5'
}, {
field: $scope.fields[2],
"class": 'col-sm-3'
}
];
和HTML:
<tr ng-repeat="item in elements.content">
<td ng-repeat="column in columns">{{ item[column.field] }}</td>
<td id="op">
<button class="btn btn-xs btn-success" ng-click="preview(item)">
<i class="fa fa-eye"></i> View
</button>
<button class="btn btn-xs btn-primary" ng-click="update(item)">
<i class="fa fa-pencil"></i> Edit
</button>
<button class="btn btn-xs btn-danger" ng-click="remove(item)">
<i class="fa fa-trash"></i> Delete
</button>
</td>
</tr>
它仅适用于内容对象的属性,不适用于内容内部对象的属性。 我能做什么?
预先感谢您的时间和帮助!
您可能需要创建一个辅助函数,该函数解析作为键传递的字符串并返回对象的值,因为您无法使用字符串访问对象的子属性:
var item = {
property: {
child: 'somevalue'
}
}
// this will return undefined
item['property.child']
幸运的是, 这个不错的功能存在:
function getDescendantProp(obj, desc) {
var arr = desc.split(".");
while(arr.length && (obj = obj[arr.shift()]));
return obj;
}
它接受一个对象和一个字符串,将字符串转换成数组,并遍历传入对象的属性,直到到达要搜索的属性。 它适用于任何深度的对象属性。
如果使用此函数并将其放在控制器的作用域内,则可以使用字段的名称和item对象来调用它:
<td ng-repeat="column in columns">{{ getDescendantProp(item, column.field) }}</td>
这是一个可行的想法示例: http : //plnkr.co/edit/34fKDKReu24381Ox8kdK?p=preview
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.