我在向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更新? –