谷歌api javascript客户端有时工作,有时是未定义的

时间:2015-08-28 13:48:28

标签: javascript angularjs google-api

我正在使用Google API JavaScript客户端,遇到一个我无法弄清楚如何解决的错误。

我的HTML文件包含以下脚本:

<script src="https://apis.google.com/js/client.js?onload=init"></script> 

然后JavaScript看起来像这样:

function init() {
      window.initGapi();
}
(function() {
"use strict";
var appControllers = angular.module('appControllers', ['ui.bootstrap']);
appControllers.controller('MusicCtrl', function($window, $modal, $scope ) { 

        $scope.list = function() {

            gapi.client.youtube.search.list({
                q: 'q',
                part: 'snippet'
            }).execute(function(response) {
                $scope.songs = response.result.items;
                $scope.$apply();            
            });     

        }

        $window.initGapi = function() {
            $scope.$apply($scope.load_youtube_api);
        }

        $scope.load_youtube_api = function() {
            gapi.client.setApiKey('API_KEY');
            gapi.client.load('youtube', 'v3', function() {
                $scope.is_backend_ready = true;
                $scope.list();
            });
        }

$scope.is_backend_ready仅在加载API时才使用HTML仅加载$scope.list()的标记。

我得到的错误是Uncaught TypeError: window.initGapi is not a function。我注意到当我第一次加载页面时发生此错误,如果在调试过程中我在$scope.load_youtube_api函数上设置了断点,则API已正确加载。

我不理解当HTML应该只在后端准备好时加载时,如何定义启动函数window.initGapi();,可以,有时和随机。我从Google Developers网站上获得了这段代码,所以也许我错误地实现了它。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

似乎在脚本加载之前调用了函数,在$ timeout内保留$ window.initGapi函数并在一秒钟后执行函数。