2016-03-16 56 views
1

John Papa的款式指南中,他提到需要包装每个零件(function(){..})。这在我的代码中增加了几行代码,这让我很担心,但还不足以证明一个漫长的解决方法。如果我需要使用IIFE,Angular为什么不使用它?

但是,当我看到实际的角码,如代码$compile和控制器,我没有看到这些声明。

如果Ng不认为它是重要的,那么为什么用IFE隔离我的变量对我来说很重要?或者更好的问题是为什么Angular没有实现IIFE?

+0

为什么?避免污染全球范围并潜在地做一些愚蠢的事情。为什么不这样做呢?那么,它使用它自己的*代码 - 为什么它不能*强迫你?因为没有理由强迫你:我们是大男孩,我们可以照顾自己。 –

回答

0

角不使用IIFE它包装在

(function(window, document, undefined) {'use strict'; 
... 

})(window, document); 

所以这个区分代码,并保护全球/外部环境和整体环境对所有的角码

您可以验证here

那么它是包装整个应用程序的权利?但它不是包裹 各个组件

要回答你的问题,这些组件不是在单独的文件,并包含在单个IIFE

单独的模块,如angular-routeng-resourceangular.module()命名空间分隔或从全球范围内模块化模式

+0

那么它包装整个应用程序的权利?但它并没有包含John所建议的各个组件。如果我包裹我的整个应用程序,根据这样的问题会被认为是错误的... https://github.com/johnpapa/angular-styleguide/issues/262 或https:// toddmotto。com/minimal-angular-module-syntax-approach-using-an-iife/ – Jackie

+0

换句话说,ngRepeat可能会“技术上”污染ngBind的变量(如果有bug) – Jackie

+1

已尝试回答您的查询,查看更新的答案 –

0

我认为答案可能是,它取决于。

首先,AngularJS必须公开angular供用户使用,因此它不能在IIFE内。 (就像jQuery公开$jQuery,虽然它有一个选项,它只公开jQuery)。然后,如果你决定使用AngularJS,那么AngularJS会在全球范围内暴露一些其他的东西并不奇怪。但到目前为止,我已经使用AngularJS,我只看到angular被曝光,所有我做的事情,我这样做是因为

angular.module() 
    .controller() 
    .directive() 
    .factory() 
    .service(); 

$compile没有暴露于全局空间。

您只使用IIFE创建本地范围,以便变量不会成为全局范围的一部分。

相关问题