Фильтр поиска Angular JS не фильтрует данные с помощью Firebase

Проблема, с которой я сталкиваюсь, заключается в том, что фильтр поиска не фильтрует таблицу. Любые советы или помощь, в чем может быть проблема? Приложение, которое я делаю, простое, пользователь должен ввести две текстовые строки и сохранить их, чтобы данные можно было сохранить в базе данных firebase. Затем отфильтруйте возможность с помощью поиска. Однако поиск не работает.

Нажмите здесь, чтобы открыть плункер

Индекс.html

 <table class="table table-bordered">
  <thead>
    <th>Plate Number</th>
    <th>Car Brand</th>
  </thead>
  <tbody>
    <tr ng-repeat="customer in customers | filter:search">
      <td>{{customer.CustomerPlateNumber}}</td>
      <td>{{customer.CustomerCarBrand}}</td>
    </tr>
  </tbody>
</table>

script.js (с использованием Firebase)

angular.module('myApp', []);

angular.module('myApp').controller('customerCtrl', function($scope) {

  $scope.CustomerPlateNumber = "";
  $scope.CustomerCarBrand = "";
  $scope.customers = {};

  $scope.myData = new Firebase("https://sizzling-torch-2102.firebaseio.com/CustomerInformation");

  // PS, husk at CustomerPlatenumber: må være lik navnet på ng-model. 
  $scope.saveCustomerData = function() {
    $scope.myData.push({CustomerPlateNumber: $scope.CustomerPlateNumber, CustomerCarBrand: $scope.CustomerCarBrand});

  // Empty input after storing data
  $scope.CustomerPlateNumber = "";
  $scope.CustomerCarBrand = "";

  };

  // Two parameters, needs to know what its going to be fired upon, and a function that tells what to do when it is fired. 
  $scope.myData.on('value', function(snapshot) {
    $scope.customers = snapshot.val();
    //not recommended, look at "refresh bindings angular"
    $scope.$apply(); 
  });

});

person Dler Ari    schedule 10.02.2016    source источник


Ответы (1)


Проблема в том, что $scope.customers — это не массив [], а сложный объект JavaScript {}.

Если вы изменили его на:

$scope.customers=[];

И преобразовал сложную хэш-таблицу, которую Firebase возвращает в массив, она работает (ради объяснения, я бы сначала проверил, есть ли у Firebase метод для возврата массива, а не с использованием этого конкретного пояснительного кода):

$scope.myData.on('value', function(snapshot) {
var values = snapshot.val();
for(var myVal in values)
{
  var item = values[myVal];

  $scope.customers.push(item);
}
});
person Daniel Lesser    schedule 10.02.2016
comment
Спасибо Даниэль Лессер, это сработало отлично. Я проверю, есть ли у firebase метод возврата массива. - person Dler Ari; 11.02.2016