这是一个示例Json,我使用Angular' s ng-repeat指令在我的html中进行渲染。
[
{
"id": "10.0.0.208",
"ip_address": "10.0.0.208",
"username": "root",
"password": "--invalid secret key--",
"ports": [
8056,
8057
],
"installations": 2,
"created": "2016-07-15 17:41:36",
"wanpipe": {
"wp1": {
"port": 8056,
"physical": true,
"signalling": true,
"outgoing": true,
"hangup_cause": "NORMAL_CLEARING",
"outgoing_caller_id": "1409716078"
},
"wp2": {
"port": 8056,
"physical": true,
"signalling": true,
"outgoing": true,
"hangup_cause": "NORMAL_CLEARING",
"outgoing_caller_id": "1409716077"
},
"wp3": {
"port": 8056,
"physical": true,
"signalling": true,
"outgoing": true,
"hangup_cause": NORMAL_CLEARING","outgoing_caller_id":"1409716077"
}
]
我通过在属性ip_address上调用角度过滤器,在HTML中创建了一个搜索栏,如下所示。它工作并返回一个名为pagedItems的过滤数组,我可以使用ng-repeat再次重复。
$scope.figureOutIPToDisplay = function(searchIP) {
console.log(searchIP);
$scope.filteredItems = $filter('filter')($scope.json.json, {
ip_address : $scope.searchIP
});
$scope.pagedItems = $scope.filteredItems;
console.log($scope.pagedItems);
};
以下是HTML代码
<div class="row" ng-repeat=" init in pagedItems ">
<div ng-repeat="(key,wanpipe) in init.wanpipe" class=" col-lg-1 col-md-1 col-sm-4 col-xs-4 ">
<button popover-trigger="focus" uib-popover-template="templateUrl" ng-if="wanpipe.physical==true"type="button" class="btn btn-primary" >{{key}}</button>
<button popover-trigger="focus" uib-popover-template="templateUrl" ng-if="wanpipe.physical==false" type="button" class="btn btn-danger">{{key}}</button>
<script type="text/ng-template" id="myPopoverTemplate.html">
<div class="row ipAddressdetails">
<div class="col-lg-12 col-md-12 text-center">
<span class="glyphicon glyphicon-random"></span> Port: {{wanpipe.port}}
</div>
</div>
<div class="row ipAddressdetails">
<div class="col-lg-12 col-md-12 text-center">
<span class="glyphicon glyphicon-time"></span> Physical: {{wanpipe.physical}}
</div>
</div>
然而在前面提到的Json中,我还尝试根据port属性过滤它,该属性是wanpipe对象的一部分,而wanpipe对象又包含其他对象,即wp1,wp2,wp3等具有端口的端口属性属性。 我已经尝试了很多东西来使它工作,但失败了,任何帮助将不胜感激。
答案 0 :(得分:4)
要进行深度过滤,请使用$
符号代替实际属性名称。因此,如果您想深入搜索对象中的所有属性,可以使用
<强> From angularjs documentation
请注意,命名属性将匹配同一级别的属性 只有,而特殊的$属性将匹配相同的属性 等级或更深。例如。一个数组项,如{name:{first:'John',last: 'Doe'}}将不会与{name:'John'}匹配,但会被匹配 {$:'John'}
$scope.filteredItems = $filter('filter')($scope.json.json, {
$: $scope.searchIP
});
然而在前面提到的Json中,我也尝试过滤它 作为wanpipe对象的一部分的port属性的基础, 它又由其他对象组成,即wp1,wp2,wp3等 拥有端口属性。
这可能适用于您的方案。这只会查看wanpipe
属性。
$scope.filteredItems = $filter('filter')($scope.json.json, {
wanpipe: {$: $scope.searchIP}
});