Ниже приведен макет того, что у меня есть, используя данные с сайта angular. Цель состоит в том, чтобы удалить все элементы в области 2 (новые устройства), которые уже существуют в области 1 (устройства). У меня есть рабочая модель, но я не считаю, что это лучший метод.
У меня есть контроллер, который извлекает данные из двух разных источников. Для простоты я сделал первую область статической, тогда как вторая будет получать данные через httpget с сайта angular, и это инициируется нажатием кнопки. (Мой код продукта должен использовать кнопку, чтобы я мог вводить переменные в вызов)
app.controller('customersCtrl', function($scope, $http) {
//Example static data for scope 1
$scope.devices = [
{"Name":"Around the Horn","City":"London","Country":"UK"},
{"Name":"B's Beverages","City":"London","Country":"UK"},
{"Name":"Chop-suey Chinese","City":"Bern","Country":"Switzerland"}
];
//scope 2 data from angular example site that is initiated from a button
$scope.loaddata = function() {
$http.get("http://www.w3schools.com/angular/customers_mysql.php")
.then(function (response) {
$scope.newdevices = response.data.records;
});
}
});
Затем у меня есть фильтр, который сравнивает области:
app.filter('matcher', function() {
return function(newdevices, devices) {
var array2Ids = []
angular.forEach(devices, function(value, index) {
array2Ids.push(value.Name);
})
return newdevices.filter(function(val) {
return array2Ids.indexOf(val.Name) === -1;
})
}
});
Наконец, я применяю фильтр к своему вызову ng-repeat:
<div ng-app="myApp" ng-controller="customersCtrl">
<button ng-click="loaddata()">load me</button>
<table>
<tr ng-repeat="x in newdevices | matcher: devices">
<td width="300px">{{ x.Name }}</td>
<td width="150px">{{ x.City }}</td>
<td width="100px">{{ x.Country }}</td>
</tr>
</table>
</div>
Как уже упоминалось, в настоящее время это работает, но, поскольку я уже вызываю httpget второй области из функции, есть ли способ интегрировать фильтр в функцию loaddata, чтобы это происходило сразу и могло устранить необходимость фильтрации на нг-повторить этап?
Я все еще относительно новичок в этом и еще не смог этого достичь.