我有一个简单的控制器和一个简单的$http.post
调用,如下所示:
var myApp = angular.module('myApp', []);
var dataShuff = [];
myApp.controller('testCtrl', ['$scope', '$http', '$timeout', function ($scope, $http, $timeout) {
$scope.greeting = 'Hola!';
var cookieArr = [];
$http.post(serverURL, input).then(function (response) {
$scope.dataShuff = dataShuff = response.data;
for (var i = 0; i < dataShuff.length; i++) {
if (typeof cookieArr[dataShuff[i].cookieID] === "undefined") {
cookieArr[dataShuff[i].cookieID] = [];
}
cookieArr[dataShuff[i].cookieID].push(dataShuff[i]);
}
$scope.dataShuff = cookieArr;
}, function (response) {
console.log('error ' + response);
});
}]);
$scope
变量dataShuff
在请求完成后更新一次,但在我通过for
循环进行一些修改并重新分配变量之后,同样没有在我的视图上获得更新通过{{ dataShuff }}
console.log($scope.dataShuff);
正在打印出正确的数据。根据其他SO答案和其他地方,我尝试$scope.$apply
和$scope.applyAsync
甚至$timeout
,但仍然无处可去。
如何在视图上更新dataShuff
变量?
P.S。我省略了serverURL
和input
变量,因为API端点属于我的组织,并且不公开。
更新
有趣的是,用var cookieArr = []
替换var cookieArr = {}
可以解决问题。
查看:
<div ng-controller="testCtrl"><pre> {{ dataShuff }} </pre><pre> {{ dataShuff | json }} </pre><div class="" ng-repeat="visit in dataShuff"><pre> {{ visit | json }} </pre></div></div>