массив $ scope не обновляется в Angular

#javascript #angularjs #web #angularjs-scope

#javascript #angularjs #веб #angularjs-scope

Вопрос:

У меня есть массив фильмов, определенный как переменная $ scope, $scope.moviesList . Я инициализировал все поля imageSrc для каждого объекта в массиве на » (пустая строка) и хочу обновить это поле для каждого объекта, используя следующую функцию (ключ API был отключен):

 //loadMoviePosters calls the movie API for each movie in the moviesList array
//and sets the imageSrc field to the Poster link returned
$scope.loadMoviePosters = function(){
    for(var i = 0; i < $scope.moviesList.length; i  ) {
        var movie = $scope.moviesList[i];
        $http({
            method: 'GET',
            url: "https://www.omdbapi.com/?t="   movie.title   "amp;apikey=XXXXXXX"
        }).then(function success(response) {
            if (response.data.Poster != "N/A") {
                movie.imageSrc = response.data.Poster;
            }
            else {
                movie.imageSrc = '';
            }
            $scope.moviesList[i] = movie;
            //alert($scope.moviesList[i].imageSrc);
        },
        function error(respnonse) {
            //do nothing
        })
    }
    alert($scope.moviesList[0].imageSrc);
}
  

Когда я раскомментирую предупреждение внутри цикла for, оно отображает ссылку на изображение для каждого объекта в массиве, но предупреждение вне цикла for всегда отображает пустую строку. Похоже, что массив $ scope.moviesList фактически не обновляется в этой функции.

В моем HTML у меня есть следующий код, в котором я хочу отображать постер для каждого фильма после того, как эта функция обновит массив $scope:

 <div ng-repeat = "movie in moviesList">
                <img ng-src = "{{movie.imageSrc}}" />
                <p>{{movie.title}}</p>
</div>
  

Кто-нибудь знает, как я могу заставить функцию loadMoviePosters фактически обновить массив $ scope.moviesList? И тогда как я могу заставить эти изображения отображаться в ng-repeat? Спасибо!

Комментарии:

1. Потому что он асинхронный. HTTP-запрос не завершен к моменту получения этого предупреждения.

2. Спасибо, это имеет смысл. После завершения всех асинхронных вызовов, как мне получить изображение в ng-repeat div для ссылки на обновленный массив?

3. Обнаружение изменений Angular должно автоматически перестраивать представление, когда обнаруживает, что список фильмов изменен.

4. Это то, что я предполагал, но этого не происходит