我使用自调用函数将所有javascript代码包含在角度控制器中(我想我在某处看到它是最佳实践)。所以我的控制器看起来像这样:
(function() {
// code
})()
我使用gulp将所有控制器合并到一个文件中。我的问题是这个。 这是否意味着我的应用程序启动时将调用并执行所有Javascript代码? 如果是这样,我想这不是一个很好的方法。 这个问题有什么解决方案吗?任何意见? 感谢
答案 0 :(得分:5)
不,并非所有代码都被执行。定义Angular模块时
(function() {
'use strict';
angular
.module('myModule', [])
.controller('myController', ['$http', myControllerFunc]);
function myControllerFunc ($http) {
// ...
}
})();
执行的只是注册模块和控制器的angular
方法。但实际的控制器逻辑在回调函数中,并且仅在调用控制器时调用(例如,通过路由器)。
所以,一切都很好,并且将代码包装在匿名函数中是一个好主意,例如myControllerFunc
,不要在全局命名空间之外。
答案 1 :(得分:1)
将代码定义为匿名函数并不重要。 Javascript客户端(此事的浏览器)必须以任何方式解析您的代码。
因此,如果你在匿名函数中有一些callbable,它就会被执行。如果你有一个带有解耦方法的声明的var,它只会定义那个var,就像在简单的单独脚本包含中一样。
Javascript是"解析"你的javascript方式,但永远不会调用你的代码没有调用的方法。当然,当你致电foo( bar )
foo
时,需要知道它会解析它。这是常见的javascript。