Угловой пользовательский фильтр ng-repeat 2 jsons
0 bafix2203 [2017-01-26 13:06:00]
Мне нужно перечислить в таблице 2 jsons, зависящие друг от друга
1st json "names":
[
{
"name": "AAAAAA",
"down": "False"
},
{
"name": "BBBBBB",
"down": "45%"
},
{
"name": "CCCCC",
"down": "12%"
}
]
второй json "datas":
[
{
"data": "AAAAAA"
}
]
Js файл:
app.service('service', function($http, $q) {
this.getNames = function() {
var datas = $http.get('datas.json', {
cache: false
});
var names = $http.get('names.json', {
cache: false
});
return $q.all([datas, names]);
};
});
app.controller('FirstCtrl', function($scope, service) {
var promise = service.getNames();
promise.then(function(data) {
$scope.names = data.names.data;
$scope.datas = data.datas.data;
})
.filter('quefilter', function() {
return function(data) {
var filterque = [];
angular.forEach(data, function(item) {
if (datas[0].data == item.name) {
filterque.push(item);
} else if (datas[0].data != item.name) {
filterque.push("err");
}
});
return filterque;
};
});
HTML файл:
<table>
<tbody>
<tr ng-repeat="name in names">
<td>{{name.name}}</td>
<td>{{name.down}}</td>
<td>{{datas[0].data | quefilter}}</td>
</tr>
</tbody>
</table>
Поэтому я пытаюсь выполнить собственный фильтр, который перечисляет только {{datas[0].data}}
рядом с тем же именем из {{names.name}}
. В моей таблице должно быть AAAAAA рядом с AAAAAA. Но мой код не работал. Спасибо за советы и ответы заранее!
json angularjs filter ng-repeat
3 ответа
0 Luca Rasconi [2017-01-26 14:04:00]
Если вы знаете, что только один элемент из данных будет соответствовать элементу в именах, используйте find https://developer.mozilla.org/it/docs/Web/JavaScript/Reference/Global_Objects/Array/find
В вашем случае добавьте эту функцию в область действия
$scope.getTheRightData = name => $scope.datas.map(d=>d.data).find(d=>d===name);
и использовать его
<td ng-bind="getTheRightData(name.name)"></td>
0 Arno_Geismar [2017-01-26 13:29:00]
Вы можете сделать это так: я добавил скрипку, чтобы уточнить
<div ng-controller="MyCtrl">
<table>
<tbody>
<tr ng-repeat="name in names">
<td>{{name.name}}</td>
<td>{{name.down}}</td>
<td ng-repeat="record in datas | filter:{data: name.name}">
{{record.data}}
</td>
</tr>
</tbody>
</table>
</div>
-1 Korte [2017-01-26 13:36:00]
Фильтр:
.filter('myFilter', function() {
return function(input, param) {
var output;
output = data.map((val) => {
if (data.name == param) return val;
})
return output;
}
На ваш взгляд:
<table>
<tbody>
<tr ng-repeat="name in names | myFilter(datas[0].data)">
<td>{{name.name}}</td>
<td>{{name.down}}</td>
</tr>
</tbody>
</table>