Ich zeige einige Daten in einer Tabelle mit Angular an und lade sie asynchron von json mit $ http. Ich habe eine Datumsauswahl und wenn der Benutzer ein anderes Datum auswählt, muss die Ansicht die Daten für dieses Datum anzeigen. Das Problem besteht darin, dass die Ansicht nicht aktualisiert wird, selbst wenn die neuen Daten korrekt geladen sind. Hier ist mein Code (ich nur wichtige Linien einschließlich vereinfacht):AngularJS-Ansicht nach Änderung des Modells nicht aktualisiert
<tbody>
<tr ng-repeat="row in tableKPI">
<td ng-repeat="index in tableKPIColsInt">{{ row[index]}}</td>
<td ng-repeat="index in tableKPIColsFloat">{{ row[index] | number:2}}</td>
</tr>
</tbody>
Wo tableKPIColsInt und Float sind nur Listen von Zeichenketten mit Spaltennamen.
loadDailyDataFromJSON = function ($plantName,$http,$scope,$timeout) {
var formattedDate = dateFormat($scope.selectedDate,"yyyy-mm-dd");
$http.get("json/"+formattedDate+".json")
.then(function (response) {
$scope.tableKPI = response.data[$plantName];
},
function(error) {
$scope.tableKPI = {};
console.log("No data for KPI for "+formattedDate);
});
// tried also to call $apply
$timeout(function() { $scope.$apply();}, 500);
};
Und der Controller:
app.controller("tableController", function($scope,$routeParams,$rootScope,$http,$timeout){
$scope.tableKPI = {};
$scope.reloadData = function(){
loadDailyDataFromJSON($rootScope.currentPlant,$http,$scope, $timeout);
};
}
Dieser Code funktioniert das erste Mal, dass ich die Seite zu laden, dann, wenn ich das Datum der neuen Daten geladen korrekt ändern, aber die Ansicht ändert sich nicht. Ich weiß, dass es viele ähnliche Fragen gibt, aber die Lösung funktioniert nicht für mich. Ich versuchte $ scope. $ Apply(), aber es gibt mir den Fehler Digest bereits in Arbeit .. Ich habe versucht, $ apply() nach einer Zeitüberschreitung aufzurufen, aber ich bekomme das gleiche Ergebnis.
[UPDATE] das Setzen der Funktion innerhalb/außerhalb des Controllers oder in einem Service ändert nichts. Die Funktion wird aufgerufen und die Daten in der Variablen werden aktualisiert.
Vielleicht gibt es ein Problem mit dem Modell? Da ich eine doppelt verschachtelte Schleife mache, nehme ich beide Informationen zur Anzeige (eine iteriert über die Zeilen und eine über die String-Indizes). Wenn ich diesen Code setzen Sie den Controller nichts Angabe funktioniert:
<tbody ng-controller="dailyCtrl as dc">
<tr ng-repeat="row in dc.tableImbalance">
<td ng-model="row[index]" ng-repeat="index in dc.tableImbalanceCols" ng-bind-html="row[index].toString()"></td>
</tr>
</tbody>
In erster Linie, warum Sie 'LoadDailyDataFromJSON' Funktion außerhalb des Controllers herausgenommen? Könnten Sie dieses Problem in Plunker/Geige reproduzieren? –