在一些AngularJS教程中,角度应用程序定义为:
myApp = angular.module("myApp",[]);
但我们也可以没有它。我能看到的唯一区别是当我们定义控制器时,我们不能使用成语:
myApp.controller("myCtrl",function(){ })
但必须使用
function myCtrl (){}
明确定义myApp有什么其他好处,因为我只为我的网站创建一个应用程序?如果我没有定义myApp,那么我的模块附加到哪里?
如果有,我如何在Jasmin测试中重新创建myApp?
答案 0 :(得分:34)
您可以(至少)3种方式定义控制器:
将控制器定义为全局 var (存储在window
对象上)
function Ctrl() {}
与做:
相同window.Ctrl = function () {}
创建模块并使用返回的实例创建新控制器:
var app = angular.module('app', []);
app.controller('Ctrl', function() {});
直接在模块上创建控制器而不存储任何引用(与2
相同但不使用vars):
angular.module('app', []);
angular.module('app').controller('Ctrl', function() {});
从Angular的角度来看,他们都是这样做的,你甚至可以把它们混合起来然后就可以了。唯一的区别是选项1
在选项2
和3
中使用全局变量,控制器存储在Angular的私有对象中。
答案 1 :(得分:4)
我知道你来自哪里,因为你的Angular引导的解释到处都是。一直玩Angular一个月(我会分享我所知道的),我已经看到你如何定义它。我也处于相同的场景中,我只需要定义myApp
一次,而不是多个。
作为替代方案,您可以在下面执行以下操作。您会注意到Angular app
和controller
不必相同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都是一样的..