ng-repeat не обновляется после изменения модели

0

Поэтому мы разрабатываем это угловое приложение с бэкэндом firebase. У меня возникают проблемы с этой конкретной функцией, которую мы реализуем. В основном, что он делает, каждый раз, когда выбран другой параметр, функция showData() запускается для извлечения соответствующих данных из firebase (и работает). Проблема в том, что ng-repeat обновляет только при первом изменении выбора. Последовательные изменения выбора не отражаются в ng-повторе (хотя данные извлекаются и, следовательно, модель изменяется).

Посмотреть:

<div class="container" ng-controller="dataController">
...
    <select ng-model="selectedOption" ng-change="showData()">
      <option ng-repeat="entry in transactions" ng-value="entry.serial">{{ entry.serial }}</option>
    </select>
  </div>
  <div class="col-md-9">
    <table class="table table-hover table-striped table-condensed">
    ...
    <tbody>
      <tr ng-repeat="entry in dataHistory">
        <td>{{ entry.id }}</td>
        <td>{{ entry.timestamp | date:"yyyy MMM dd 'at' h:mm:ssa" }}</td>
        <td>{{ entry.amount }}</td>
      </tr>
    </tbody>
  </table>
</div>

контроллер:

...
.controller('dataController', ['$scope', '$firebaseArray', function($scope, $firebaseArray) {
    ...    
    $scope.showData = function() {
      $scope.dataHistory = [];
      transfersRef.orderByChild('serial').equalTo($scope.selectedOption).on('child_added', function(snap) {
        transactionsRef.orderByKey().equalTo(snap.val().transactionID).on('child_added', function(data) {
          var entry = {};
          entry = data.val();
          entry.id = data.key();
          usersRef.child(entry.fromUserId).child('name').once('value', function(nameSnap) { entry.fromUsername = nameSnap.val(); });
          usersRef.child(entry.toUserId).child('name').once('value', function(nameSnap) { entry.toUsername = nameSnap.val(); });
          console.log('entry: \n' + entry);
          $scope.dataHistory.push(entry);
        });
      });
    };
  }])
...
Теги:
firebase

1 ответ

0

Попробуйте применить $scope.$apply() $scope.dataHistory.push(entry); $scope.$apply() после $scope.dataHistory.push(entry); в вашем коде.

Это связано с тем, что код обновления вашего массива может быть за пределами цикла углового дайджеста.

  • 0
    Он находится внутри контроллера, нет необходимости в $ apply, фактически он выдает ошибку, если применяется.
  • 0
    Хорошо, вы пробовали console.log ($ scope.dataHistory) после добавления новой записи? Что это показывает?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню