2015-06-20 4 views
1

Я использую requirejs и Angular, и я пытаюсь создать структуру приложения, которая позволяет мне разделить каждый контроллер/службы/директивы и т. Д. В разных файлах. Это структура, я хотел бы достичь:requirejs + структура структуры angularjs в разных файлах

src/ 
components/ 
    Navigation/ 
     index.js 
     module.js 
     NavigationController.js 
     NavigationService.js 

В module.js я хотел бы сделать что-то вроде этого:

define(['angular', './NavigationService', './NavigationController'], function (angular, NavigationService, NavigationController) { 
    'use strict'; 
    return angular.module('Myapp.Navigation', []) 
     .controller('NavigationController', NavigationController) 
     .service('NavigationService', NavigationService) 
}); 

И, определение контроллера/услуг определяется в обособленное js-файл.

Проблема в том, что я не знаю, как определить эти файлы. Я пробовал с этим синтаксисом:

//NavigationService.js 
define(function() { 

      this.doNavigation = function() { 
       console.log('I am navigating'); 
      } 
    }); 

но не выглядит работающим. Вы когда-нибудь видели такую ​​структуру, используя requirejs?

Спасибо!

ответ

1

Try:

//NavigationService.js 
define([], function() { 
    NavigationController.$inject = ['$scope', '$q', 'myOwnService', 'etc']; 
    function NavigationController($scope, $q, myOwnService, etc) { 
     ... 
    } 
    return NavigationController; 
}); 

Вы также можете быть заинтересованы в angular-require-lazy.

+0

Efharisto Nikos. Это решение работает отлично. – gabric

0

На самом деле, вам не нужно requirejs в случае одного приложения. Иерархия верхнего уровня в угловом приложении. Все приложения имеют свой набор модулей, а угловые должны иметь все источники с самого начала, поэтому вам не нужно загружать их с помощью requirejs.

Вместо этого я рекомендую вам использовать grunt с плагином concat. Он соберет все части приложения вместе, и у вас будет один файл для каждого приложения.

Затем, когда у вас есть один файл для каждого приложения, вы можете загрузить его с помощью requirejs, он имеет смысл, но не загружает модули.

Также проверьте angular code style, у него есть много предложений о том, как правильно писать.

UPD: О вашей проблеме: если вы набор модулей, которые являются общими для приложений (я имею в виду у вас есть много из них), то вы, вероятно, заинтересованы в использовании require.js с angular.js. В этом случае read and follow recommendations из этой статьи. В противном случае, вам не нужно require.js

+0

Спасибо за ответ. К сожалению, я должен использовать requirejs по другим причинам (проект более сложный, он использует библиотеки, и это лишь малая его часть). Я использую grunt-contrib-requirejs – gabric

+0

@gabric, прочитав статью выше, у нее мало основных мыслей, которые я нашел не очевидными: requirejs и angularjs имеют отдельных менеджеров инъекций; вы должны использовать ручной бутстрапинг для углового, если вы используете requirejs. – outoftime

Смежные вопросы