我在使用Angular的表格上显示了一些数据,我使用$ http从json异步加载它。我有一个日期选择器,当用户选择不同的日期时,视图必须显示该日期的数据。 问题是,即使新数据正确加载,视图也不会刷新。 这里是我的代码(我包括简化的唯一重要行):AngularJS视图在模型更改后未刷新
<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>
凡tableKPIColsInt和浮动只是列名字符串列表。
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);
};
而且控制器:
app.controller("tableController", function($scope,$routeParams,$rootScope,$http,$timeout){
$scope.tableKPI = {};
$scope.reloadData = function(){
loadDailyDataFromJSON($rootScope.currentPlant,$http,$scope, $timeout);
};
}
此代码的工作,我第一次加载页面,那么如果我更改了新数据是否正确的日期,但认为不会改变。 我知道有很多类似的问题,但该解决方案对我无效。 我试着调用$ scope。$ apply(),但它给了我已经在进行中的错误摘要..我试着在超时后调用$ apply(),但是我获得了相同的结果。
[更新]将函数放入控制器内部或外部,并不会改变任何内容。调用函数并更新变量中的数据。
也许模型有问题吗?由于我做了一个双重嵌套的循环,我将两个信息都显示出来(一个迭代遍历行,一个遍历字符串索引)。如果我把这个代码指定控制器没有什么作品:
<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>
首先,为什么你拿出'loadDailyDataFromJSON'函数以外的控制器?你能在plunker/fiddle中重现这个问题吗? –