15

在一些 AngularJS 教程中,angular app 被定义为:

myApp = angular.module("myApp",[]);

但我们也可以没有它。我能看到的唯一区别是当我们定义控制器时,我们不能使用成语:

myApp.controller("myCtrl",function(){ })

但必须使用

function myCtrl (){}

鉴于我只会为我的网站创建一个应用程序,明确定义 myApp 是否还有其他好处?如果我没有定义 myApp,那么我的模块连接到哪里?

如果有,我如何在 Jasmin 测试中重新创建 myApp?

4

3 回答 3

34

您可以(至少)3 种方式定义控制器:

  1. 将控制器定义为全局变量(存储在window对象上)

    function Ctrl() {}
    

    这与执行以下操作相同:

    window.Ctrl = function () {}
    
  2. Create a module and use the returned instance to create new controllers:

    var app = angular.module('app', []);
    app.controller('Ctrl', function() {});
    
  3. Create the controllers directly on the module without storing any references (the same as 2 but without using vars):

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

From Angular's point of view, they all do the same, you can even mix them together and they will work. The only difference is that option 1 uses global vars while in options 2 and 3 the controllers are stored inside an Angular's private object.

于 2013-02-12T23:13:44.740 回答
4

我明白你来自哪里,因为关于引导你的 Angular 的解释到处都是。只玩了 Angular 一个月(无论如何我都会分享我所知道的),我已经看到你在上面是如何定义它的。我也处于相同的场景中,我只需要定义myApp一次而不需要定义多个。

作为替代方案,您可以在下面执行类似的操作。您会注意到 Angularappcontroller不必遵循相同的namespace. 我认为这更利于可读性和组织性。

JS:

window.app = {};
/** Bootstrap on document load and define the document along with 
      optional modules as I have below.
*/
angular.element(document).ready(function () {
    app.ang = angular.bootstrap(document, ['ngResource', 'ngSanitize']);

    // OR simply, works similarly.
    // angular.bootstrap(document, []);

});

/** Define Angular Controller */
app.myController= function ($scope, $resource, $timeout) {

};

HTML:

<div role="main" ng-controller="app.myController"></div>
于 2013-02-12T17:32:08.660 回答
-3

无论如何,您必须使用 angular.module 定义应用程序。myApp.controller 和函数 myCtrl 是一样的..

于 2013-02-12T17:12:25.917 回答