Javascript 使用AngularJs仅显示其子对象具有特定值的选定对象行
以下是正在使用的JSON 它包含一个对象数组(分支)。然后,这些对象具有称为“服务”的子对象。我试图显示分行名称及其服务。但只有那些类型为的乳霜Javascript 使用AngularJs仅显示其子对象具有特定值的选定对象行,javascript,angularjs,angularjs-ng-repeat,Javascript,Angularjs,Angularjs Ng Repeat,以下是正在使用的JSON 它包含一个对象数组(分支)。然后,这些对象具有称为“服务”的子对象。我试图显示分行名称及其服务。但只有那些类型为的乳霜 [ { "b_sn": "1", "b_name": "Alambagh", "service": [ { "i_sn": "1", "i_name": "Vanilla", "i_type": "cream", "i_detail": ""
[
{
"b_sn": "1",
"b_name": "Alambagh",
"service": [
{
"i_sn": "1",
"i_name": "Vanilla",
"i_type": "cream",
"i_detail": ""
},
{
"i_sn": "2",
"i_name": "Orange",
"i_type": "candy",
"i_detail": ""
}
]
},
{
"b_sn": "2",
"b_name": "Aminabad",
"service": [
{
"i_sn": "3",
"i_name": "Butterscotch",
"i_type": "cream",
"i_detail": ""
},
{
"i_sn": "4",
"i_name": "Blueberry",
"i_type": "cream",
"i_detail": ""
}
]
},
{
"b_sn": "3",
"b_name": "Hazratganj",
"service": [
{
"i_sn": "1",
"i_name": "Orange",
"i_type": "candy",
"i_detail": ""
},
{
"i_sn": "2",
"i_name": "Mango",
"i_type": "candy",
"i_detail": ""
}
]
}
]
我只想显示那些具有I_type=“cream”
的行,如果任何分支(对象)没有任何数量的子属性“cream”,则其b_名称不应显示在表中
以下是页面的HTML代码:
锡。
分支机构名称
服务
{{br.b_sn}}。
{{br.b_name}
{{i.i_sn}}。{{i.i_name}
{{i.detail}}
对于没有“cream”类型服务的分支,您可以编写一个函数来过滤特定分支拥有的所有服务,如果没有找到“cream”类型的服务,则返回false,即不显示该分支
同样,对于服务,您可以手动检查每个服务是否有cream类型,这样您将只打印其中有cream类型的分支
,以及cream类型的服务
大概是这样的:
<table>
<tr>
<th>SN.</th>
<th>Branch Name</th>
<th>Services</th>
</tr>
<tr ng-if="creamCheck(br)" data-ng-repeat="br in branches">
<td>{{br.b_sn}}.</td>
<td>{{br.b_name}}</td>
<td>
<table>
<th></th>
<tr ng-if="i.i_type==='cream'" data-ng-repeat="i in br.service">
<td style="width:70%">{{i.i_sn}}. {{i.i_name}}</td>
<td>{{i.detail}}</td>
</tr>
</table>
</td>
</tr>
</table>
对于没有“cream”类型服务的分支,这应该是一个技巧,您可以编写一个函数来过滤特定分支拥有的所有服务,如果没有找到“cream”类型的服务,则返回false,即不显示该分支
同样,对于服务,您可以手动检查每个服务是否有cream类型,这样您将只打印其中有cream类型的分支
,以及cream类型的服务
大概是这样的:
<table>
<tr>
<th>SN.</th>
<th>Branch Name</th>
<th>Services</th>
</tr>
<tr ng-if="creamCheck(br)" data-ng-repeat="br in branches">
<td>{{br.b_sn}}.</td>
<td>{{br.b_name}}</td>
<td>
<table>
<th></th>
<tr ng-if="i.i_type==='cream'" data-ng-repeat="i in br.service">
<td style="width:70%">{{i.i_sn}}. {{i.i_name}}</td>
<td>{{i.detail}}</td>
</tr>
</table>
</td>
</tr>
</table>
这应该能帮上忙了谢谢大家的帮助。
我找到了解决办法。下面是上述问题的代码
<div ng-app="myApp" ng-controller="myCtrl">
<table class="table">
<tr>
<th>SN.</th>
<th>Branch Name</th>
<th>Services</th>
</tr>
<tr data-ng-repeat="br in branches | myFilter: {'key':key}">
<td>{{br.b_sn}}.</td>
<td>{{br.b_name}}</td>
<td>
<table>
<tr data-ng-repeat="i in br.service|filter :{i_type:'cream'}">
<td>{{i.i_sn}}. {{i.i_name}}</td>
<td>{{i.detail}}</td>
</tr>
</table>
</td>
</tr>
</table>
</div>
<script>
var app = angular.module('myApp', []);
app.filter('myFilter', function() {
return function(json, input) {
console.log(json, input);
var new_json = [];
for(var i=0; i<json.length; i++){
var flag = false;
for(var j=0; j<json[i].service.length; j++){
if(json[i].service[j].i_type == input.key){
flag = true;
break;
}
else{
flag = false;
}
}
if(flag){
new_json.push(json[i]);
}
}
return new_json;
};
});
app.controller('myCtrl', function($scope) {
$scope.key = "cream";
$scope.branches = [
{
"b_sn": "1",
"b_name": "Alambagh",
"service": [
{
"i_sn": "1",
"i_name": "Vanilla",
"i_type": "cream",
"i_detail": ""
},
{
"i_sn": "2",
"i_name": "Orange",
"i_type": "candy",
"i_detail": ""
}
]
},
{
"b_sn": "2",
"b_name": "Aminabad",
"service": [
{
"i_sn": "3",
"i_name": "Butterscotch",
"i_type": "cream",
"i_detail": ""
},
{
"i_sn": "4",
"i_name": "Blueberry",
"i_type": "cream",
"i_detail": ""
}
]
},
{
"b_sn": "3",
"b_name": "Hazratganj",
"service": [
{
"i_sn": "1",
"i_name": "Orange",
"i_type": "candy",
"i_detail": ""
},
{
"i_sn": "2",
"i_name": "Mango",
"i_type": "candy",
"i_detail": ""
}
]
}
];
});
</script>
锡。
分支机构名称
服务
{{br.b_sn}}。
{{br.b_name}
{{i.i_sn}}。{{i.i_name}
{{i.detail}}
var-app=angular.module('myApp',[]);
app.filter('myFilter',function(){
返回函数(json,输入){
log(json,输入);
var new_json=[];
对于(var i=0;我感谢大家的帮助。
我得到了我的解决方案。这是上面问题的代码
<div ng-app="myApp" ng-controller="myCtrl">
<table class="table">
<tr>
<th>SN.</th>
<th>Branch Name</th>
<th>Services</th>
</tr>
<tr data-ng-repeat="br in branches | myFilter: {'key':key}">
<td>{{br.b_sn}}.</td>
<td>{{br.b_name}}</td>
<td>
<table>
<tr data-ng-repeat="i in br.service|filter :{i_type:'cream'}">
<td>{{i.i_sn}}. {{i.i_name}}</td>
<td>{{i.detail}}</td>
</tr>
</table>
</td>
</tr>
</table>
</div>
<script>
var app = angular.module('myApp', []);
app.filter('myFilter', function() {
return function(json, input) {
console.log(json, input);
var new_json = [];
for(var i=0; i<json.length; i++){
var flag = false;
for(var j=0; j<json[i].service.length; j++){
if(json[i].service[j].i_type == input.key){
flag = true;
break;
}
else{
flag = false;
}
}
if(flag){
new_json.push(json[i]);
}
}
return new_json;
};
});
app.controller('myCtrl', function($scope) {
$scope.key = "cream";
$scope.branches = [
{
"b_sn": "1",
"b_name": "Alambagh",
"service": [
{
"i_sn": "1",
"i_name": "Vanilla",
"i_type": "cream",
"i_detail": ""
},
{
"i_sn": "2",
"i_name": "Orange",
"i_type": "candy",
"i_detail": ""
}
]
},
{
"b_sn": "2",
"b_name": "Aminabad",
"service": [
{
"i_sn": "3",
"i_name": "Butterscotch",
"i_type": "cream",
"i_detail": ""
},
{
"i_sn": "4",
"i_name": "Blueberry",
"i_type": "cream",
"i_detail": ""
}
]
},
{
"b_sn": "3",
"b_name": "Hazratganj",
"service": [
{
"i_sn": "1",
"i_name": "Orange",
"i_type": "candy",
"i_detail": ""
},
{
"i_sn": "2",
"i_name": "Mango",
"i_type": "candy",
"i_detail": ""
}
]
}
];
});
</script>
锡。
分支机构名称
服务
{{br.b_sn}}。
{{br.b_name}
{{i.i_sn}.{i.i_name}
{{i.detail}}
var-app=angular.module('myApp',[]);
app.filter('myFilter',function(){
返回函数(json,输入){
log(json,输入);
var new_json=[];
对于(var i=0;iyou可能需要为您的第一次ng repeat
@Aleksey Solovey感谢您的回答。我尝试过您的问题有点过于宽泛或混乱。我建议为您的逻辑创建一个简单的自定义筛选器。以下是我的尝试:。我过滤掉所有未将“i_type”设置为“cream”的内容对于行的所有元素。请随意修改code@AlekseySolovey-谢谢!但是我想用服务I_-type=cream显示每个分支。但是您的代码只显示那些带有所有I_-type cream的分支。@AlekseySolovey-谢谢。您的代码真的很有帮助。我做了一些修改。我已经在答案部分发布了解决方案。T再次感谢hanks。您可能需要为您的第一次ng repeat
@Aleksey Solovey提供自定义筛选器。谢谢您的回答。我尝试过您的问题有点过于宽泛或混乱。我建议为您的逻辑创建一个简单的自定义筛选器。以下是我的尝试:。我过滤掉所有未将“I_type”设置为“cream”的内容对于行的所有元素。请随意修改code@AlekseySolovey-谢谢!但是我想用服务I_-type=cream显示每个分支。但是您的代码只显示那些带有所有I_-type cream的分支。@AlekseySolovey-谢谢。您的代码真的很有帮助。我做了一些修改。我已经在答案部分发布了解决方案。T又是汉克斯。