Неверная настройка переменной AngularJS

if (index < 0 || index >= array.length) {
    // Don't use this index. This is out of bounds (borders, limits, whatever).
} else {
    // Yes, you can safely use this index. The index is present in the array.
    Object element = array[index];
}

См. также:


Обновление: в соответствии с вашим фрагментом кода,

for(int i = 0; i<=name.length; i++) {

Индекс содержит длину массива. Это за гранью. Вы должны заменить <= на <.

for(int i = 0; i < name.length; i++) {
0
задан georgeawg 13 July 2018 в 14:23
поделиться

2 ответа

2
ответ дан Nikhil Aggarwal 17 August 2018 в 12:39
поделиться

Если обратный вызов действительно из стороннего источника вне контекста выполнения AngularJS, можно просто использовать $apply:

portal.controller('portalViewController', function($scope) {
    storage.get('portal_url', (err, data) => {
        $scope.$apply(function() {
            $scope.url = data.url;
        });
    });
});

Из Документов:

AngularJS изменяет нормальный поток JavaScript, предоставляя свой собственный цикл обработки событий. Это разбивает JavaScript на классический контекст исполнения и AngularJS. Только операции, которые применяются в контексте выполнения AngularJS, получат выгоду от привязки данных AngularJS, обработки исключений, просмотра свойств и т. Д. Вы также можете использовать $apply() для ввода контекста выполнения AngularJS из JavaScript.

Имейте в виду, что в большинстве мест (контроллеры, службы) $apply уже вызывается для вас директивой, которая обрабатывает событие. Явный вызов $apply необходим только при реализации пользовательских обратных вызовов событий или при работе со сторонними обратными вызовами библиотеки.

[/g3]

- Руководство для разработчиков AngularJS - Интеграция с циклом событий браузера


Преобразование API на основе обратного вызова в API-интерфейс на основе AngularJS

Можно интегрировать API-интерфейс обратного вызова в структуру AngularJS, создав службу:

app.service("storageAPI", function($q) {
    this.get = function(url) {
        var deferred = $q.defer();
        storage.get(url, (err, data) => {
            if (err) { 
                deferred.reject(err);
            } else {
                deferred.resolve(data);
            };
        });
        return deferred.promise;
    };
});

Использование:

app.controller('portalViewController', function($scope, storageAPI) {
    storageAPI.get('portal_url')
      .then(function(data) {
         $scope.url = data.url;
    }).catch(function(err) {
         console.log(err);
    });
});

Преимущество этого подхода заключается в том, что он интегрирует API в AngularJS без необходимости $apply (услуга $ q делает это автоматически). Кроме того, он эффективно обрабатывает ошибки API.

Дополнительные сведения см. В разделе - AngularJS $ q Service API Reference - API отложенного доступа .

0
ответ дан georgeawg 17 August 2018 в 12:39
поделиться
Другие вопросы по тегам:

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