如何在 Angular 项目中与 Google Client js api 一起加载 js 文件有点棘手。
这个问题正在谈论这样做的正确顺序。 Angular Js 和 google api client.js (gapi)
并且有一个官方文档谈论这个, https://cloud.google.com/developers/articles/angularjs-cloud-endpoints-recipe-for-building-modern-web-applications/。
文档中的一件事是它在 init 内部使用了 window.init() ,这将导致无限循环。
正如 willlma 所指出的,我们应该为函数使用不同的名称。
但是我遇到了 Uncaught TypeError: window.initGAPI is not a function 的错误
该项目是通过使用 yeoman generator for angular 创建的。
index.html中加载js的顺序
<script src="scripts/app.js"></script>
<script src="scripts/controllers/main.js"></script>
<script src="scripts/controllers/about.js"></script>
<script src="https://apis.google.com/js/client.js?onload=init"></script>
app.js(仅此文件的后半部分):
var init = function(){
console.log("gapi init");
window.initGAPI();
}
主.js:
angular.module('testApp')
.controller('MainCtrl', function ($scope, $window) {
$window.initGAPI = function(){
console.log("controller inti");
}
$scope.awesomeThings = [
'HTML5 Boilerplate',
'AngularJS',
'Karma'
];
});
我放了一些日志来测试,发现$window.initGAPI的定义是在加载调用window.init的cliet.js之前执行的,但是window.init内部没有定义window.initGAPI。似乎在主控制器中,为对象窗口定义一个名为 initGAPI 的函数失败了。