У меня есть простой html файл, который делает поиск в Algolia и возвращает результат. Я могу утешить результат, но не могу получить доступ к $ scope.users из представления. Как я могу захватить этот объект $ scope.users.
вот мой файл 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);
});
});
Вот мой файл html view
<div class="results" ng-controller="usersController">
<div ng-repeat="user in users">
<h3>{{ user.name }}</h3>
</div>
</div>
note: атрибут ng-app = "myApp", указанный в теге html.
Это, скорее всего, потому, что ваш вызов index.search
не запускает цикл Angular $digest
- вручную запускает один из них либо $apply
либо $timeout
index.search('john', function searchDone(err, content) {
$scope.users.push(content.hits);
$scope.$apply();
});
$apply()
может генерировать $digest already in progress
ошибок - другой способ с $timeout
myApp.controller('usersController', function($scope, $timeout) {
index.search('john', function searchDone(err, content) {
$timeout(function() {
$scope.users.push(content.hits);
});
});
});
$scope.$evalAsync()
я бы сказал: P вместо $ timeout
$timeout
поскольку он оборачивает вызов $apply
docs.angularjs.org/api/ng/service/$timeout, который можно отключить, установив invokeApply
в false (по умолчанию true)
algoliasearch
не похож на инъецированную услугу и, следовательно, не является родной для угловой структуры. Попробуйте вызвать $scope.$apply()
.
попробуйте вызвать $scope.$apply()
для обновления привязок
index.search('john', function searchDone(err, content) {
$scope.users.push(content.hits);
console.log(content.hits);
$scope.$apply();
});