2013-02-12 2 views
15

В некоторых AngularJS учебников, угловатое приложение определяется как:В чем преимущество определения углового приложения?

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

Но мы можем обойтись и без нее. Единственное различие, которое я могу видеть, когда мы определяем контроллер, мы не можем использовать идиомы:

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

но должен использовать

function myCtrl(){} 

Есть ли какие-либо другие преимущества определения MYAPP в явном виде, учитывая, что я создаст только одно приложение для моего сайта? Если я не определяю myApp, то где мои модули привязаны?

Если есть, то как я могу воссоздать myApp при тестировании с помощью Jasmin?

ответ

34

Вы можете определить контроллеры в (по крайней мере) 3 способами:

  1. Определение контроллера как глобальный вар (хранящаяся на window объекта)

    function Ctrl() {} 
    

    , который так же, как делают:

    window.Ctrl = function() {} 
    
  2. Создайте модуль и использовать возвращаемый экземпляр для создания новых контроллеров:

    var app = angular.module('app', []); 
    app.controller('Ctrl', function() {}); 
    
  3. Создайте контроллеры непосредственно на модуле, не сохраняя никаких ссылок (так же, как 2, но без использования ВАРА):

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

С точкой угловой зрения, все они делают то же самое, вы даже можете смешивать их вместе, и они будут работать.Единственное различие заключается в том, что в опции 1 используются глобальные вары, тогда как в опциях 2 и 3 контроллеры хранятся внутри частного объекта Angular.

+0

Спасибо за кучу за очень четкий ответ! – AdamNYC

+0

Вы также можете присоединить 'services',' directives', ... – EpokK

-3

вы все равно должны определить приложение с угловым модулем. myApp.controller и функция myCtrl - то же самое.

+0

Привет, Гал, пожалуйста, исправьте меня, если я ошибаюсь, но я не думаю, что вам нужно определить приложение, чтобы определить модуль. Вы можете просто использовать 'angular.module ('myModule, [])'. См. Например, http://docs.angularjs.org/tutorial/step_11 – AdamNYC

+0

, вам нужно создать модуль с именем вашего приложения, иначе ng-app предоставит вам сообщение об ошибке. –

+0

@ GalBen-Haim, не обязательно. См. Мой ответ без определения 'ng-app'. –

4

Я понимаю, откуда вы пришли, поскольку объяснение для самонастройки вашего Углового повсюду. Играя с Angular только на месяц (я поделюсь тем, что знаю, так или иначе), я видел, как вы определили это выше. Я тоже был в том же сценарии, где мне нужно было определить только myApp и не иметь нескольких.

В качестве альтернативы вы можете сделать что-то вроде этого ниже. Вы заметите, что Угловые 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> 
Смежные вопросы