重复模型更改后不更新

ng-repeat not updating after model changed

本文关键字:更新 模型      更新时间:2023-09-26

所以我们正在用firebase后端开发这个angular应用。我在实现这个函数时遇到了麻烦。它所做的基本上是每次选择不同的选项时,showData()函数都会触发以从firebase检索相关数据(并且它可以工作)。问题是ng-repeat只在第一次选择更改时更新。连续的选择更改不会反映在ng-repeat中(尽管检索了数据,因此模型更改了)。

视图:

<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);
        });
      });
    };
  }])
...

尝试在代码中$scope.dataHistory.push(entry);之后应用$scope.$apply()

这是因为你的数组更新代码可能在angular摘要周期之外。