@ydusanyuk
I'm enjoying programming

Почему добавленные элементы в массив не отображаются (angularJs + ajax)?

У меня есть массив строк, который с помощью angular отображается списком, но я не могу добавить в него строку с функции success ajax запроса. При добавлении с обычной функции все добавляется нормально.

Код контроллера:
function directoryController($scope) {
    function initialize() {
        $.ajax({
            url: '/api/directory/',
            type: 'GET',
            dataType: 'json',
            success: function (data) {
                for (var i = 0; i < data.length; i++) {
                    alert(data[i].Name);
                    $scope.directories.push(data[i].Name); //Эти элементы не добавляются
                }
            },
            error: function (x, y, z) {
                alert(x + '\n' + y + '\n' + z);
            }
        });
    }

    function test() {
        $scope.directories.push("test"); //этот элемент добавлен успешно
    }
    $scope.currentDir = "";
    $scope.directories = ["..."];

    test();
    initialize();
}


Разметка:
<p class="currentDirectory"><span>Current directory: </span>{{currentDir == "" ? '[ROOT]' : currentDir}}</p>
    <span ng-model="currentDir"></span>
    <ul>
        <li ng-repeat="obj in directories">
            <p>{{obj}}</p>
        </li>
    </ul>


Результат:
34ddbc47e96a4a348f2f5afe0fc8bb77.PNG
  • Вопрос задан
  • 148 просмотров
Решения вопроса 2
@Nc_Soft
А почему не используется ?
$http.get('...').success(function(response){})
Ответ написан
Проблема в том, что ангуляр не в курсе, какие асинхронные операции вы вытворяете и его нужно оповещать в таких случаях. Поэтому рекомендуется использовать сервисы предоставленные ангуляром, в данном случае $http или $resource. То же самое касается $timeout, директив для бинда DOM эвентов(ng-click например). Если какой-то сторонний метод возвращает ES Promise - то стоит обернуть его в $q.when().
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы