angular:为什么 ng-repeat 不更新来自 ajax 调用的数据?
angular: Why won't ng-repeat update with data from ajax call?
从控制器执行 ajax 调用。可以从两个不同的 link 触发调用,它们都在同一个 html 模板中。当使用上面的 link 切换到选项卡时, ajax 调用返回的数据会正确显示。使用 refresh
link 时,ng-repeat 中的元素不会更新。有人知道这是为什么吗?
angularjs:
app.controller("ActiveSimulations",
["$scope", "$http", "socket",
function($scope, $http, socket){
$scope.active_simulations_dict = {};
$scope.get_active_simulations = function() {
var responsePromise = $http.get("/active_simulations");
responsePromise.success(function (data, status, headers, config) {
$scope.active_simulations_dict = data;
console.log($scope.active_simulations_dict)
});
responsePromise.error(function (data, status, headers, config) {
console.log('Warning - "AJAX failed!"')
alert("AJAX failed!");
});
};
}]);
HTML
<div id="followSim" class="tab-pane fade">
<h3>Follow running simulations</h3>
<div class="inline-containers">
<div id="simulation-list-wrapper">
<ul class="list-unstyled">
<li ng-repeat="(key, value) in active_simulations_dict">
<a ng-show="value[0] && value[2]" ng-click="followActiveSimulation(key)">
{[{ value[0] }]} ( {[{ value[2] }]} is director)
</a>
</li>
</ul>
</div> <!--end simulation list wrapper-->
<div id="refresh-simulation-list" ng-controller="ActiveSimulations">
<a id="refresh-link"
class="right-side"
ng-click="get_active_simulations()">
<i class="icon-refresh right-side"></i>
refresh list
</a>
</div>
正如@kasoban 指出的那样,您可能遇到多个实例的问题。最佳做法是创建一个 service 来处理您的请求。您可以注入它并从任何控制器调用请求函数,例如:
$scope.active_simulations_dict = RequestService.get_active_simulations();
从控制器执行 ajax 调用。可以从两个不同的 link 触发调用,它们都在同一个 html 模板中。当使用上面的 link 切换到选项卡时, ajax 调用返回的数据会正确显示。使用 refresh
link 时,ng-repeat 中的元素不会更新。有人知道这是为什么吗?
angularjs:
app.controller("ActiveSimulations",
["$scope", "$http", "socket",
function($scope, $http, socket){
$scope.active_simulations_dict = {};
$scope.get_active_simulations = function() {
var responsePromise = $http.get("/active_simulations");
responsePromise.success(function (data, status, headers, config) {
$scope.active_simulations_dict = data;
console.log($scope.active_simulations_dict)
});
responsePromise.error(function (data, status, headers, config) {
console.log('Warning - "AJAX failed!"')
alert("AJAX failed!");
});
};
}]);
HTML
<div id="followSim" class="tab-pane fade">
<h3>Follow running simulations</h3>
<div class="inline-containers">
<div id="simulation-list-wrapper">
<ul class="list-unstyled">
<li ng-repeat="(key, value) in active_simulations_dict">
<a ng-show="value[0] && value[2]" ng-click="followActiveSimulation(key)">
{[{ value[0] }]} ( {[{ value[2] }]} is director)
</a>
</li>
</ul>
</div> <!--end simulation list wrapper-->
<div id="refresh-simulation-list" ng-controller="ActiveSimulations">
<a id="refresh-link"
class="right-side"
ng-click="get_active_simulations()">
<i class="icon-refresh right-side"></i>
refresh list
</a>
</div>
正如@kasoban 指出的那样,您可能遇到多个实例的问题。最佳做法是创建一个 service 来处理您的请求。您可以注入它并从任何控制器调用请求函数,例如:
$scope.active_simulations_dict = RequestService.get_active_simulations();