Mar*_*arc 6 javascript angularjs google-cloud-endpoints
我已经阅读了以下配方,其中显示了使用Google Cloud Endpoints后端为AngularJS前端提供支持的方法:
我不明白的是AngularJS和Cloud Endpoints初始化的附录.相关部分如下:
附录:关于AngularJS + Cloud端点初始化的提示提示#1:注意初始化序列
留言簿应用程序按以下顺序加载三个不同的JS库:
- AngularJS
- 留言簿应用程序
- Google API客户端,包含端点功能
为了遵循这个顺序,index.html在
<script>标记中包含以下 标记,<head>用于加载每个JS库:Run Code Online (Sandbox Code Playgroud)<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世界
在初始化序列中,我们使用两个函数:
Run Code Online (Sandbox Code Playgroud)init() function window.init() function这个init()函数在guestbook.js中以下列方式定义:
Run Code Online (Sandbox Code Playgroud)function init() { window.init(); }正如您可以看到上面的代码,该函数只调用window.init()函数(即在全局窗口对象中定义的init()函数)而不执行任何其他操作.window.init()在AngularJS控制器中定义如下:
Run Code Online (Sandbox Code Playgroud)$window.init= function() { $scope.$apply($scope.load_guestbook_lib); };在AngularJS中,全局窗口对象由"$ window"表示法访问,该表示法是它的包装器.AngularJS中的最佳实践是不直接访问窗口对象以提高可测试性.
您不希望在第一个init()方法中执行初始化的原因是您可以在AngularJS世界中放置尽可能多的代码,例如控制器,服务和指令.因此,您可以利用AngularJS的全部功能并进行所有单元测试,集成测试等.
似乎init()在外部javascript文件中定义了一个全局函数.这个init()函数只是调用window.init()(并且应该在加载后由Google客户端库调用).但是window.init()不是全局定义的init()函数吗?所以我们不会在这里得到一个循环,直到window.init()(并因此init())被重新定义?
guestbook.js 定义了一个 init 函数,从您的描述来看,该函数是全局的。该 init 函数被传递给 google client.js。该全局 init 函数只是在 window.init 处调用(另一个)全局函数。首先加载的 Angular 模块应该通过 Angular 提供的 $window 设置 window.init。没有循环,client.js 调用 guestbook.js 的 init,后者调用角度方法 $window.init,这与 window.init 相同。
| 归档时间: |
|
| 查看次数: |
2807 次 |
| 最近记录: |