0
因此,我們正在開發具有Firebase後端的角度應用程序。我遇到了我們正在執行的特定功能的問題。基本上它是每次選擇不同的選項時,showData()函數觸發以從Firebase中檢索相關數據(並且它有效)。問題在於ng-repeat僅在第一次選擇更改時更新。連續的選擇更改不會反映在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);
});
});
};
}])
...
它在控制器內部不需要$ apply,實際上如果應用它會引發錯誤。 –
好的,你是否在推送新條目後嘗試過console.log($ scope.dataHistory)?它顯示了什麼? –
它顯示「過早的最終結果」,我期待這一點,因爲數據檢索是異步的。它只缺少一些字段,但我認爲它不應該導致視圖不更新。 –