定义Angular应用程序有什么好处?

时间:2013-02-12 16:39:36

标签: angularjs

在一些AngularJS教程中,角度应用程序定义为:

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

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

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

但必须使用

function myCtrl (){}

明确定义myApp有什么其他好处,因为我只为我的网站创建一个应用程序?如果我没有定义myApp,那么我的模块附加到哪里?

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

3 个答案:

答案 0 :(得分:34)

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

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

    function Ctrl() {}
    

    与做:

    相同
    window.Ctrl = function () {}
    
  2. 创建模块并使用返回的实例创建新控制器:

    var app = angular.module('app', []);
    app.controller('Ctrl', function() {});
    
  3. 直接在模块上创建控制器而不存储任何引用(与2相同但不使用vars):

    angular.module('app', []);
    angular.module('app').controller('Ctrl', function() {});
    
  4. 从Angular的角度来看,他们都是这样做的,你甚至可以把它们混合起来然后就可以了。唯一的区别是选项1在选项23中使用全局变量,控制器存储在Angular的私有对象中。

答案 1 :(得分:4)

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

作为替代方案,您可以在下面执行以下操作。您会注意到Angular appcontroller不必相同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>

答案 2 :(得分:-3)

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