AngularJS Scope wird nach asynchronem Aufruf in der Ansicht nicht aktualisiert

Ich habe Probleme beim Aktualisieren meines Bereichs im Front-End, während ich eine Anforderung an eine API stelle. Im Backend kann ich sehen, dass sich der Wert meiner $ scope-Variablen ändert, dies wird jedoch nicht in den Ansichten widergespiegelt.

Hier ist mein Controller.

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);
      });
    });  
 }
});

Hier ist ein Ausschnitt aus meinem 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>

Ich habe verschiedene Lösungen ausprobiert, einschließlich der Verwendung von $ scope. $ apply (); aber das erzeugt nur den allgemeinen Fehler

Error: $ digest bereits in Bearbeitung

Der folgende Beitrag schlug vor, @ zu verwend $ timeout oder $ asyncDefaultAngularJS: Verhindert, dass der $ digest-Fehler bereits ausgeführt wird, wenn $ scope aufgerufen wird. $ Apply ()

Der Code, den ich oben habe, verwendet $ timeout und ich habe keine Fehler, aber die Ansicht wird immer noch nicht aktualisiert.

Hilfe geschätzt

Antworten auf die Frage(6)

Ihre Antwort auf die Frage