我在向API发出请求时更新前端范围时遇到问题。在后端,我可以看到我的$ scope变量的值正在改变,但这并未反映在视图中。AngularJS范围在异步调用后未在视图中更新
这是我的控制器。
Controllers.controller('searchCtrl',
function($scope, $http, $timeout) {
$scope.$watch('search', function() {
fetch();
});
$scope.search = "Sherlock Holmes";
function fetch(){
var query = "http://api.com/v2/search?q=" + $scope.search + "&key=[API KEY]&format=json";
$timeout(function(){
$http.get(query)
.then(function(response){
$scope.beers = response.data;
console.log($scope.beers);
});
});
}
});
这里是我的HTML片段
<div ng-if="!beers">
Loading results...
</div>
<p>Beers: {{beers}}</p>
<div ng-if="beers.status==='success'">
<div class='row'>
<div class='col-xs-8 .col-lg-8' ng-repeat="beer in beers.data track by $index" ng-if="beer.style">
<h2>{{beer.name}}</h2>
<p>{{beer.style.description}}</p>
<hr>
</div>
</div>
</div>
<div ng-if="beers.status==='failure'">
<p>No results found.</p>
</div>
我已经尝试了几种解决方案,包括使用$范围$适用()。但这只是创建了常见的错误
Error: $digest already in progress
以下后建议使用$超时或$ asyncDefault AngularJS : Prevent error $digest already in progress when calling $scope.$apply()
我上面的代码使用$超时,我没有错误,但仍然是视图不更新。
帮助表示赞赏
你不应该需要'timeout' - '$ http'会触发'$ digest'循环 - 你确定数据会回来吗? – tymeJV
向请求添加错误处理程序。还要检查开发工具网络以确保请求成功并返回预期的结果。听起来像ajax问题 – charlietfl
同意这个代码不需要超时,并且$ http应该触发一个摘要循环。 $ http response中的console.log是否显示$ scope.beers更新? –