Angular模块的陷阱

当调用`angular.module`函数时,在第二个参数中是否指定数组会产生不同的意义。

    第2引数に配列を指定する場合
// myModuleを新規に作成し、既存のmyModuleが存在した場合には、上書きする。
angular.module('myModule', []);
    第2引数を指定しない場合
// 既存のmyModuleを取得する。
angular.module('myModule');
    「第2引数を指定しない場合」のパターンでは、myModuleが存在していない場合に、次のようなエラーになる。

未捕获错误:[$injector:nomod] 模块’myModule’不可用!您可能拼写错误或忘记加载该模块。如果注册一个模块,请确保在第二个参数中指定依赖项。

陷阱

如果在设置模块的控制器时,采用了“在第二个参数中指定数组”的模式来获取模块,将会覆盖已存在的模块。

// myModuleモジュールを作成し、AControllerを設定する。
angular.module("myModule", []) .controller("AController", AController);

// myModuleモジュールを作成し、BControllerを設定する。既存のmyModuleは上書きされる。
angular.module("myModule", []) .controller("BController", BController);

当发生这种情况时,AController的设置会被覆盖并丢失,因此在使用AController的地方会出现以下错误。

错误:[ng:areq]参数 ‘AController’ 不是一个函数,得到了未定义。

如果要多次调用模块,则只需首次使用“在第二个参数中指定数组”的模式创建新模块,并在第二次以后使用“不指定第二个参数”的模式获取模块。

// myModuleの新規作成
angular.module("myModule", []);

// 既存のmyModuleにコントローラを設定
angular.module("myModule") .controller("AController", AController);

// 既存のmyModuleにコントローラを設定
angular.module("myModule") .controller("BController", BController);

// AController と BController を使用可能

请参考AngularJS官方文档中的「创建与检索」部分来描述规范。

广告
将在 10 秒后关闭
bannerAds