我正在使用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网站上获得了这段代码,所以也许我错误地实现了它。任何帮助表示赞赏。
答案 0 :(得分:0)
似乎在脚本加载之前调用了函数,在$ timeout内保留$ window.initGapi函数并在一秒钟后执行函数。