Я использую этот код:
$http.get('/api/users').
success(function(data) {
$scope.authors = data;
}).
error(function() {
console.log('API error - config.')
});
И где-то внизу (много внизу):
for (var i = 0; i < $scope.authors.length; i++) {
...
};
Иногда бывает, что $scope.authors
пока недоступны. Есть ли способ решить это?
ОБНОВИТЬ
Это целая структура блока:
// author
$http.get('/api/users').
success(function(data) {
$scope.authors = data;
processAuthors();
}).
error(function() {
console.log('API error - config.')
});
// if updating form
$scope.$on('$routeChangeSuccess', function() {
if($routeParams.id) {
$http.get('/api/offers/' + $routeParams.id).
success(function(data) {
// author
function processAuthors() {
for (var i = 0; i < $scope.authors.length; i++) {
if($scope.authors[i].email == data.author.email) {
$scope.author = $scope.authors[i];
};
};
}
Да, неважно, насколько это ниже - вам все равно нужно вызвать его из обратного вызова, потому что он асинхронный вызов:
function processAuthors() {
for (var i = 0; i < $scope.authors.length; i++) {
...
};
}
А потом:
$http.get('/api/users').
success(function(data) {
$scope.authors = data;
processAuthors();
})
Я использовал функцию, чтобы сделать ее более чистым, но вы можете скопировать код, зависящий от обратного вызова внутри него.
ОБНОВИТЬ
function processAuthors(data) {
for (var i = 0; i < $scope.authors.length; i++) {
if($scope.authors[i].email == data.author.email) {
$scope.author = $scope.authors[i];
};
};
}
$scope.$on('$routeChangeSuccess', function() {
if($routeParams.id) {
$http.get('/api/offers/' + $routeParams.id).
success(function(data) {
// author
processAuthors(data); // just call it here, define it outside
Поместите цикл в последовательность:
$http.get('/api/users').
success(function(data) {
$scope.authors = data;
for (var i = 0; i < $scope.authors.length; i++) {
...
};
}).
error(function() {
console.log('API error - config.')
});