init()和window.int()有什么区别

What is the difference between init() and window.init()?

本文关键字:什么 区别 window init int      更新时间:2023-09-26

我已经通读了下面的食谱,它展示了一种通过谷歌云端点后端为AngularJS前端供电的方法:

https://cloud.google.com/resources/articles/angularjs-cloud-endpoints-recipe-for-building-modern-web-applications

我不明白的是关于AngularJS和Cloud端点初始化的附录。相关章节如下:

附录:AngularJS+云端点初始化提示#1:注意初始化顺序

留言簿应用程序加载以下三个不同的JS库序列:

  • AngularJS
  • 留言簿应用程序
  • Google API客户端,包含端点功能

为了遵循这个顺序,index.html包含以下内容<head>标签中的<script>标签用于加载每个JS库:

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

加载后,第三个库(Google API客户端)调用由其"onload"参数指定的初始化函数。在这个在这种情况下,需要并调用init()函数。技巧2:输入AngularJS世界尽可能快的

在初始化序列中,我们使用两个函数:

init() function
window.init() function

这个init()函数在guestbook.js中定义如下:

function init() {   window.init(); }

正如上面的代码所示,该函数只调用window.init()函数(即在全局窗口对象中定义的init()函数)什么也不做。window.int()是在AngularJS中定义的控制器如下:

$window.init= function() {   
   $scope.$apply($scope.load_guestbook_lib);
};

在AngularJS中,全局窗口对象由"$window"访问符号,它是它的包装器。这是AngularJS中的最佳实践不直接访问窗口对象以提高可测试性。

不希望在中执行初始化的原因第一个init()方法可以尽可能多地放入代码在AngularJS世界中,例如控制器、服务和指令。因此,您可以充分利用AngularJS的力量您的单元测试、集成测试等等。

似乎在一个外部javascript文件中定义了一个全局函数init()。这个init()函数只调用window.init()(并且应该在加载后由Google客户端库调用)。但是window.int()不就是全局定义的init()函数吗?那么,在window.init()(以及init())被重新定义之前,我们不会在这里得到一个循环吗?

此示例尝试获取google-api-init事件并将其转移到AngularJS范围。

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

加载后,它调用全局定义的init函数,该函数又调用在窗口对象上定义的init方法。由于该功能可以访问角度范围,因此它与角度配合良好

它使云端点调用更容易封装在promise 中

以下是如何让它变得更容易http://anandsekar.github.io/initialize-google-appengine-and-angularjs/

guestbook.js定义了一个init函数,该函数在您的描述中显示为全局函数。该init函数被传递给google client.js。该全局init函数只调用window.init中的(另一个)全局函数。首先加载的angular模块应该通过angular提供的$window设置window.init。没有循环,client.js调用guestbook.js的init,该init调用角度方法$window.init,与window.init相同。