2016-05-12 5 views
0

Ich habe eine einfache HTML-Datei, die Suche auf Algolia machen und Ergebnisse zurückgibt. Ich kann das Ergebnis trösten, kann aber nicht auf $ scope.users zugreifen. Wie kann ich diese $ scope.users im Blick haben.

hier ist mein app.js

var myApp = angular.module('myApp', []); 

    myApp.controller('usersController', function($scope) { 
     $scope.users = []; 

     var client = algoliasearch('my_app_id', 'my_app_key'); 
     var index = client.initIndex('getstarted_actors'); 

     index.search('john', function searchDone(err, content) { 
      $scope.users.push(content.hits); 
      console.log(content.hits); 
     }); 

    }); 

Hier Datei ist meine HTML-Datei ansehen

<div class="results" ng-controller="usersController"> 
    <div ng-repeat="user in users"> 
     <h3>{{ user.name }}</h3> 
    </div> 
</div> 

Anmerkung: ng-app = "myApp" -Attribut in HTML-Tag gegeben.

+0

Das sieht richtig aus. – ryanyuyu

+0

Was gibt {{user}} aus, ich glaube, Sie haben keine Namenseigenschaft für den Benutzer. –

+0

Sintax sieht alt aus, versuchen Sie * ng-controller = "usersController als Benutzer" * dann * ng-repeat = "usr in user.users" * und * {{usr.name}} *, seien Sie sicher Ihre $ scope.users .push() ist wirklich Push – sbaaaang

Antwort

1

Es ist höchstwahrscheinlich weil Ihr index.search Anruf nicht ein Winkel $digest Zyklus auslösenden - manuell ein Trigger entweder mit $apply oder ein $timeout

index.search('john', function searchDone(err, content) { 
    $scope.users.push(content.hits); 
    $scope.$apply(); 
}); 

Die $apply()$digest already in progress Fehler werfen könnte - eine andere Art und Weise mit einem $timeout

myApp.controller('usersController', function($scope, $timeout) { 
    index.search('john', function searchDone(err, content) { 
     $timeout(function() { 
      $scope.users.push(content.hits); 
     }); 
    }); 
}); 
+0

'$ scope. $ EvalAsync()' würde ich sagen: P statt $ timeout – sbaaaang

+0

keine Notwendigkeit für das '$ timeout', da es einen Aufruf von' $ apply' umschließt https://docs.angularjs.org/api/ ng/service/$ timeout, das ausgeschaltet werden kann, indem 'invokeApply' auf' false 'gesetzt wird (standardmäßig' true ') –

+0

Ich denke $ scope.users.push() ist nicht wirklich pushen. denn wenn ich $ scope.users außerhalb von index.search function() truste, tröste es einfach leer [] array. Was soll ich machen? –

0

versuchen Sie telefonisch $scope.$apply() Ihre Bindungen

index.search('john', function searchDone(err, content) { 
    $scope.users.push(content.hits); 
    console.log(content.hits); 
    $scope.$apply(); 
}); 
0

algoliasearch zu aktualisieren sieht nicht, wie es ein injizierten Dienst ist und daher der Winkelrahmen nicht heimisch. Versuchen Sie, $scope.$apply() anzurufen.