#javascript #angularjs
#javascript #angularjs
Вопрос:
Я пытаюсь разделить мои угловые контроллеры на разные файлы. Прямо сейчас каждый из них выглядит следующим образом.
AddPropertyController.js
angular.module('myApp.controllers.addproperty', [])
.controller(...);
SearchController
angular.module('myApp.controllers.search', [])
.controller(...);
Теперь для каждого из них мне пришлось включить их в Angular MyApp. via:
angular.module('myApp', [
'myApp.controllers.search',
'myApp.controllers.addproperty'
])
мой вопрос в том, есть ли способ просто включить их все сразу, вместо того, чтобы добавлять их по отдельности? Моей первой попыткой было присвоить каждому модулю одинаковое имя angular.module(‘MyApp.controllers’, …), а затем просто включить MyApp.controllers в приложение. Но, похоже, это не сработало… Я думаю, я спрашиваю, каков наилучший способ разделить файлы контроллера, но все в одном модуле. Спасибо за помощь!
Ответ №1:
Ознакомьтесь с документами angularjs для получения информации о контроллерах и добавлении их в модули уровня приложения…
Например, для вашего кода:
var myApp = angular.module('myApp',[]);
myApp.controller('SearchController', ['$scope', function($scope) {
$scope.search = 'Hola!';
}]);
myApp.controller('AddPropertiesController', ['$scope', function($scope) {
$scope.props = [];
}]);
По сути, вы подключаете каждый контроллер к экземпляру MyApp, поэтому приложение знает о контроллерах.
Комментарии:
1. Я не думаю, что это помогает мне разделить контроллеры на разные файлы… Я имею в виду, что так у меня было изначально, но я использую более 20 контроллеров в сборках… Когда я разделяю их на разные файлы, у меня нет доступа к переменной MyApp, и если я пытаюсь воссоздать ее снова, я получаю ошибки.
2. @BrentAureli неверно,
myApp
находится в глобальном пространстве имен window. Я делаю это постоянно и имеюmyApp
в многочисленных файлах …. директивы, контроллеры, службы и т.д. Намного проще, чем создавать модули, а затем отслеживать точки внедрения при добавлении / удалении3. вы можете вызвать angular.module(‘MyApp’) — без второго аргумента, и он просто извлекет модуль (он не будет пытаться воссоздать его)
4. Это правда, если вы разделите вышеуказанные файлы на JS, предполагая, что
myApp
объявлено первым, все будет работать нормально…5. ДА! После еще нескольких попыток ошибка определенно с моей стороны. Большое всем спасибо! Это сработало отлично!
Ответ №2:
Я бы организовал их следующим образом:
MyController1.js
var MyController1 = ['$scope', function($scope) {
}];
MyController2.js
var MyController2 = ['$scope', function($scope) {
}];
MyModule.js
var app = angular.module('MyModule',[]);
app.controller({
MyController1: MyController1,
MyController2: MyController2,
etc
});
Это похоже на то, как организован исходный код Angular: