2015-08-12 2 views
0

Я использую angularjs и есть эти нг-INIT вызовы делаются в моих частичными:Как заставить ng-init «ждать», пока все библиотеки не будут полностью загружены?

<div ng-init="invited()"> 

В мой контроллер, я приглашенная вызов структурирована следующим образом. Он имеет Gapi асинхронный вызов:

$scope.invited = function() { 

    gapi.client.conference.invited(). 
     execute(function(resp){ 
      $scope.$apply(function() { 
       if (resp.error){ 
        $log.error('There was an Error'); 
       } 
       else { 
        $log.info("Success"); 
        $scope.invitedHangouts = [] 
        $scope.invitedHangout=[] 
        angular.forEach(resp.items, function(invitedHangout){ 
         $scope.invitedHangouts.push(invitedHangout); 
        }); 
       } 
      }); 
     }); 

}; 

Проблема заключается в том, что всякий раз, когда я обновить страницу с парциальное выше, я получаю TypeError: Не удается прочитать свойство «пригласило» неопределенной.

В этот момент страница загружается. Тем не менее, я заметил своеобразное поведение, которое, как только я обновляю страницу, а затем получаю этот TypeError, когда я перехожу на другую страницу, а затем возвращаюсь к частичному с помощью ng-init выше, тогда он загружается отлично. Затем он выводит «Успех» вместе с остальной информацией.

Почему это происходит, когда я обновляю страницу, я получаю TypeError, а затем, как только я обновил страницу, вы получите TypeError, перейдите от страницы и вернитесь на эту страницу, чтобы она выполнялась нормально?

Я подозреваю, что это связано с тем, что он не закончил загрузку моего кода сервера backend - gapi. Приглашенный() из gapi.client.conference.invited() - это функция, которую я написал для своего сервера в коде python.

От работы с этой проблемой до сих пор, поскольку она в конечном итоге успешно выполняет функцию приглашения() после того, как я перемещаюсь, а затем вернусь на эту страницу, я предполагаю, что это имеет какое-то отношение к тому, что мой front-end вызывая back-end без его инициализации.

В чем особенность заключается в том, что, если мое предположение верно, почему тогда это происходит, когда я пропускаю внешний вызов к чему-то несуществующему в бэкэнд (фактически имитирующему тот факт, что фронт вызывает бэкэнд когда это не делается загрузка), я получаю совершенно другую ошибку? Должен ли я получить тот же TypeError?

Я пропущу щель как таковой: gapi.client.conference.boomshakalaka(). boomshakalaka() не находится в моем базовом коде python.

Сначала, когда я обновляю страницу с помощью этой несуществующей функции в бэкэнд, я получаю ту же ошибку, что и выше. Затем, когда я уйду и вернуться к той же странице, я получаю другой тип ошибки: TypeError: gapi.client.conference.boomshakalaka не является функция

Раньше это было просто TypeError неопределенного, теперь его это TypeError, не являющийся функцией.

Как он может теперь знать, что это не функция? Он мог только знать, если он загрузил задний конец и понял, что нет такой функции при попытке выполнить вызов. Не следует ли это делать из начального обновления страницы, учитывая, что нет существующей функции?

Я думаю, что, возможно, это поймано где-то в подвешенном состоянии между ним, загрузив эти промежутки бранденции в gapi.client.conference, но еще не полностью загрузив все, чтобы «знать», что boomshakalaka действительно не существует.

Как я могу инициализировать эту страницу с помощью этого вызова gapi, но заставить его ждать, пока бэкэнд не будет полностью загружен? Опять же, я подозреваю, что мой бэкэнд-код не загружен полностью, поскольку когда я перехожу от страницы после обновления и возвращаюсь к нему, я не получаю такой ошибки. Все затем успешно печатается на консоли. Только когда я обновляю, я получаю TypeError.

Идеи?

+0

не должен использовать нг иниц таким образом, в первую очередь ... читать документы – charlietfl

ответ

0

Область проблема является gapi.client.conference в то время как вы могли бы попытаться обернуть в $ таймаут поверх существующего кода, чтобы дать свой скрипт некоторое время, чтобы он инициализирован.

Грязное исправление, которое может работать, но вы должны попытаться выяснить, почему служба gapi терпит неудачу на первом месте. Возможно, сделать обратный вызов, когда он готов вместо выполнения углового init.

$scope.invited = function() { 
$timeout(function(){ 
    gapi.client.conference.invited(). 
     execute(function(resp){}); 
},200); 
}; 
+0

лучше подход использовать маршрутизатор решительность – charlietfl

+0

Эй, спасибо, за $ таймаута это поможет мне в дальнейшем диагностировать проблему. Я только что попробовал это, и это 50/50 выстрел из службы щели после успешного обновления страницы. Так что есть что-то в отношении загрузки gapi.client.conference, и ему нужно «закончить». Хотя, как указал charlietfl, и, как я подозревал, я использую ng-init не так, как предполагалось. Мне нужно инициализировать страницу с помощью этого вызова gapi. Документы говорят, что инициализируются внутри контроллера, поэтому я полностью удаляю тело функции scope scope.invited и просто оставляю gapi. Все еще не инициализируется правильно. – vama89

+0

Oh and Abhi, P.S. Я поддержал ваш ответ, у вас есть баллы за это. Мне все еще не хватает репутации. так что он не будет публично менять оценку upvote. Просто убедитесь, что вы получаете кредит. – vama89

Смежные вопросы