2015-09-04 3 views
2

Я использую API-интерфейс для включения GA-диаграмм на моем сайте из ServiceAccount. Сайт представляет собой приложение с одной страницей с помощью AngularJS. Я создал несколько директив для каждого типа диаграммы и контроллера, назовите его GAController, разделяемый между ними. В этом контроллере я использую gapi.analytics.ready(..) для ожидания полной загрузки объекта analytics.API-интерфейс Google Charts API не работает

Проблема заключается в том, что когда GAController вызывается в первый раз после обновления страницы, то gapi.analytics.ready(..) вызывается с функцией обратного вызова, а затем выполняется аутентификация и другая логика. Hovewer, если я иду на эту страницу для второй раз f.e. с другой страницы через ui-router, затем обратный вызов добавляется к ready, но не выполняется. Вообще.

в шаблон внизу страницы, есть gapi script:

(function(w,d,s,g,js,fjs){ 
g=w.gapi||(w.gapi={});g.analytics={q:[],ready:function(cb){this.q.push(cb)}}; 
js=d.createElement(s);fjs=d.getElementsByTagName(s)[0]; 
js.src='https://apis.google.com/js/platform.js'; 
fjs.parentNode.insertBefore(js,fjs);js.onload=function(){g.load('analytics')};} 
(window,document,'script')); 

мой код выглядит следующим образом:

gapi.analytics.ready(function() { 
    // this is not called the second time 
    if (!gapi.analytics.auth.isAuthorized()) { 
    gapi.analytics.auth.authorize({ 
     serverAuth: $scope.$parent.getAccessToken() 
    }); 
    } 
    // do some other logic 
}); 

, но все время gapi.analytics объект находится в том же состоянии { q: [], ready: function()...}.

Может кто-нибудь помочь мне понять, что происходит. Спасибо за любую помощь

+0

У меня такие же проблемы, кто нам помогает – andy

ответ

1

Я нашел ответ. Вы можете попробовать это, чередуйте «скрипку с щели»

    (function (w, d, s, g, js, fs) { 
        if ($('#googleCache').length > 0) return; 
        g = w.gapi || (w.gapi = {}); g.analytics = { q: [], ready: function (f) { this.q.push(f); } }; 
        js = d.createElement(s); fs = d.getElementsByTagName(s)[0]; 
        js.src = 'https://apis.google.com/js/platform.js'; 
        js.id = "googleCache"; 
        fs.parentNode.insertBefore(js, fs); js.onload = function() { g.load('analytics'); }; 
       }(window, document, 'script')); 
Смежные вопросы