У меня все мои контроллеры AngularJS в одном файле, controllers.js. Этот файл имеет следующую структуру:
angular.module('myApp.controllers', [])
.controller('Ctrl1', ['$scope', '$http', function($scope, $http) {
}])
.controller('Ctrl2', ['$scope', '$http', function($scope, $http) }
}])
Я хотел бы поместить Ctrl1 и Ctrl2 в отдельные файлы. Затем я включил бы оба файла в мой index.html, но как это должно быть структурировано? Я попытался сделать что-то вроде этого, и в консоли веб-браузера выдается сообщение о том, что не удается найти мои контроллеры. Есть намеки?
Я искал StackOverflow и нашел этот похожий вопрос - однако, этот синтаксис использует другой каркас (CoffeeScript) поверх Angular, и поэтому я не смог следовать.
источник
appCtrl
глобальныйwindow.appCtrl
. Это не очень хорошая практика.Использование API angular.module с массивом в конце скажет angular создать новый модуль:
myApp.js
Использование его без массива на самом деле является функцией получения. Таким образом, чтобы отделить ваши контроллеры, вы можете сделать:
Ctrl1.js
Ctrl2.js
Во время импорта javascript просто убедитесь, что myApp.js находится после AngularJS, но перед любыми контроллерами / службами / и т.д. ... в противном случае angular не сможет инициализировать ваши контроллеры.
источник
Хотя оба ответа технически верны, я хочу ввести другой синтаксис для этого ответа. Это imho облегчает чтение того, что происходит с инъекцией, различение и т. Д.
Файл Один
Файл Два
Файл Три
источник
Как насчет этого решения? Модули и контроллеры в файлах (в конце страницы). Работает с несколькими контроллерами, директивами и так далее:
app.js
myCtrl.js
HTML
У Google также есть Рекомендации по лучшей структуре угловых приложений, которые мне действительно нравится группировать по контексту. Не все html в одной папке, но, например, все файлы для входа (html, css, app.js, controller.js и т. Д.). Поэтому, если я работаю над модулем, все директивы легче найти.
источник
Для краткости приведем пример ES2015, в котором не используются глобальные переменные.
источник
name
... так что вы можете просто использоватьExampleCtrl.name
вместо дублирования .. утроить его.Не очень изящное, но очень простое в реализации решение - использование глобальной переменной.
В «первом» файле:
во «втором», «третьем» и т. д .:
источник
angular.module('myApp').controller('ProductCtrl', ['$scope', '$http', function($scope, $http){ //Your ProductCtrl code goes here }]);