【问题标题】:Angular : When to use "[]" in modules and controllersAngular:何时在模块和控制器中使用“[]”
【发布时间】:2017-04-01 20:36:25
【问题描述】:

我从 Angular 开始,我不明白在声明(如果这样调用)模块和控制器时何时使用或不使用 []

到目前为止,我明白了:

angular.module('app.prof', []).config(config); 表示我声明模块prof

angular.module('app.prof').config(config); 表示我调用它。

但我总是在控制器中而不是模块中拥有[],当我有两个控制器时,我不知道该怎么办了。

我只是想了解 Angular :(

编辑:添加更多细节

在我的 Angular 项目中,我使用 Fuse 主题和一个叫做 Yeoman 的东西(如果我理解得很好的话),所以我自己从不在任何地方写 <script> 标签。

例如,我有这个模块:

    angular
    .module('app.prof')
    .config(config);

还有这个控制器:

    angular
    .module('app.prof', [])
    .controller('ProfController', ProfController);

我的模块和控制器总是以这种方式声明,但有时我会收到诸如“模块未声明”或“控制器未声明”之类的错误;让我最终在模块或控制器中随机放置括号,直到它起作用。

编辑 2:

这是我的主要模块:

angular
    .module('fuse', ['app.prof']);

我的教授模块:

    angular
    .module('app.prof')
    .config(config);

和我的教授控制器:

    angular
    .module('app.prof', [])
    .controller('ProfController', ProfController);

这样,整个事情就正常了。但是当我这样做时:

    angular
    .module('app.prof', [])
    .config(config);

    angular
    .module('app.prof')
    .controller('ProfController', ProfController);

我明白了:

【问题讨论】:

  • 哎呀,小错字
  • 如果您给出与您的示例相对应的特定错误会有所帮助。因此,不要说“有时我会遇到这样或那样的错误”,而是说“使用这个示例代码,我看到了这个特定的错误”。您将更有可能得到有用的答案。
  • 我添加了您想要的屏幕截图和更多信息

标签: javascript angularjs


【解决方案1】:

第二个参数是模块的依赖关系。由于您目前没有任何依赖项,因此您有一个空数组 []

只有在创建新模块时才添加方括号(依赖项)。每次您只想使用相同的模块时,都不应该有括号。所以最后每个模块都应该用 [] 声明一次。并且应该每隔一段时间调用一次。

还要确保以正确的顺序导入文件和代码。否则,当您尝试向其添加控制器时,该模块尚未定义。

小例子。具有多个控制器的应用模块。

angular.module('app', []);

angular.module('app').controller('aCtrl', [ function () {} ]);
angular.module('app').controller('bCtrl', [ function () {} ]);

// ...

长话短说。如果你声明一个模块,你需要括号。如果您想使用该模块,请不要添加它们。


编辑:再次,对于您的编辑,您需要确保以正确的顺序定义和使用所有内容。

以下取决于app.prof,这意味着app.prof声明需要在此行之前:

angular.module('fuse', ['app.prof']);

这已经表明模块app.prof 已声明并且您尝试向其中添加配置。当 app.prof 未在您收到与您显示的类似错误之前声明时:

angular.module('app.prof')
    .config(config);

这声明了模块 app.prof 并向该模块添加了一个控制器:

angular.module('app.prof', [])
    .controller('ProfController', ProfController);

这声明了app.prof 模块并立即为其添加一些配置:

angular.module('app.prof', [])
    .config(config);

这会将控制器添加到名为 app.prof 的现有模块中:

angular.module('app.prof')
    .controller('ProfController', ProfController);

我想你明白了……

至于解决方案,您需要按照与此类似的顺序声明它们...无论所有内容都在一个文件中还是逐个文件加载它们都没有关系,但模块声明顺序很重要。

angular.module('app.prof', [])
    .config(config);

angular.module('app.prof')
    .controller('ProfController', ProfController);

angular.module('fuse', ['app.prof']);

控制器声明可能会在以后发生,但无论如何你需要注意顺序。正如您所说,fuse 是您需要在之前声明app.prof 的主模块。

【讨论】:

  • 为了更清楚:我使用 Fuse 主题,如果我理解得很好,还有一个叫做 Yeoman 的东西,所以我自己从不导入任何东西
  • Yeoman 可能会帮助您将外部脚本注入应用程序。但是无论如何,如果你想在你自己的控制器和服务中使用外部服务,你必须确保你的 Angular 应用程序知道这些其他模块。然后您需要将这些模块作为依赖项添加到您自己的模块中,如下所示:angular.module('app', ['ui.bootstrap', 'ngAnimate']).
  • @Orsu 我编辑了答案以回复您添加的问题。
  • 感谢您非常完整的回答!我想现在更清楚了
【解决方案2】:

在角度中,“[]”用于将外部(角度)依赖项注入您的模块并获取它的访问权限。参考下面的例子

angular.module('app.proof',['myservice']).controller(function(bootstrap,myservice){
 myservice.callmethod();});

希望这有帮助!

【讨论】:

    【解决方案3】:

    因此,当您创建一个模块时,您可以添加其他模块作为您计划使用的依赖项:

    var app = angular.module('myModule', ['Restangular', 'UserService', 'otherModule']);
    

    然后,当您创建控制器时,您可以使服务、工厂等对控制器可用。

    app.controller('MyNewController', ['$scope', '$http', 'restangular', function($scope, $http, restangular) {
        // Your code here
        $scope.name = "Daniel";
    });
    

    【讨论】:

      【解决方案4】:

      你可以像这样声明一个模块:

       angular.module('myModule', []);
      

      同样,你可以像这样声明一个控制器:

       angular.module('myModule')
          .controller('MyController', []);
      

      当您声明控制器时,您并没有在模块中使用空数组表示法,因为您是在已经存在的模块上定义控制器。

      传递给模块或控制器的空数组 ([]) 是要注入模块或控制器的依赖项的占位符。请参阅:AngularJS Depedency Injection

      每个 AngularJS 项目都有一个“顶级”或根模块。当您根据ng-app 指令使用它时,该模块将引导您的应用程序。

      在您的顶级模块中,您声明对应用程序中其他模块的依赖关系。例如:

      angular.module('root', ['childModule1', 'childModule2', 'childModule3']);
      

      在您的控制器中,您使用依赖注入来注入服务、函数或 AngularJS 的内置库(例如 $http、$sce 或 $q)例如:

      angular.module('root')
          .controller('RootController', ['$window', '$location', 'myRootService']);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-02-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-13
        • 2022-06-12
        相关资源
        最近更新 更多