加载Google客户端api、gapi和angular js的正确顺序
The correct order to load Google Client api gapi and angular js
如何在Angular项目中与Google Client js api一起加载js文件有点棘手。
这个问题讨论的是做这件事的正确顺序。client.js (gapi)
有一个官方的医生在谈论这个,https://cloud.google.com/developers/articles/angularjs-cloud-endpoints-recipe-for-building-modern-web-applications/。
文档中的一件事是它在init中使用了window.init(),这会导致无限循环。
正如willlma指出的,我们应该为函数使用不同的名称。
但是我遇到了一个错误未捕获的类型错误:窗口。initGAPI不是一个函数
该项目是通过使用angular的yeoman生成器创建的。
在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();
}
main.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的client .js之前执行。Init,但在窗口内。init,窗口。没有定义initGAPI。似乎在主控制器中,定义一个名为initGAPI的函数到对象窗口失败了。
我认为以自己的方式正确加载两个库并不容易,因为它们都是以不同的方式异步的。相反,让一个加载另一个更容易。
第一种更简单的方法是将client.js库放在所有脚本的末尾,然后在Google库完全加载后手动进行Angular引导。
其他方法可能是相反的,所以让Angular创建Google client.js脚本标签并加载库。
检查此项目:https://github.com/canemacchina/angular-google-client我创建了这个库来帮助我在Angular中使用Google客户端库,它使用了第二个方法…
我也遇到过类似的问题。也许你可以尝试这样的init函数,以便它在控制器尚未加载时再次尝试。
function init() {
if (window.initGapi != undefined) {
window.initGapi();
}
else {
setTimeout(init, 500); // wait for 500 ms
}
}
- 2个backbone.js集合,具有相同的模型,但排序顺序不同
- 使用JS按顺序显示图像,而不是随机显示
- js”;在“;不按特定顺序追加键/值
- Node.js:多个然后'It’执行顺序不正确
- 如何使d3.js树布局按字母顺序对节点进行排序
- 如何在角度js的自动完成下拉列表中对项目列表(按字母顺序)进行排序
- 按顺序异步加载JS脚本(等待上一个脚本完成)
- 使用Require.js按照依赖关系的顺序加载JavaScript
- 使函数按顺序运行[Node JS]
- 如何根据 js 中每个单词的第 n 个字母按字母顺序排列列表
- 使用 KNOCKOUT.js 在禁用元素的 HTML 中保持 Tab 键顺序
- Node.JS中的模式顺序是否重要
- 如何通过grunt contrib uglify按顺序缩小js文件
- JS中jQuery函数的过程顺序
- 通过普通JS更改元素的索引(顺序)
- Knockout.JS加载顺序问题
- 函数的 JS 顺序调用失败
- 使用键/值选择角度 JS 顺序
- 在Knockoutjs中使用引用过滤器的CloudKit JS顺序查询
- MySQL, Node.js顺序操作-我如何做到这一点