Я видел этот пост AngularJS best practices for module declaration? Но я все еще немного запутался о лучшем способе объявить и отдельные angularJS файлов для модулей, контроллеры, услуг и т.д.Как отделить angularjs файлов без использования глобального масштаба
Я понимаю это хорошая практика для переноса контроллеров и сервисов в IIFE, потому что это предотвращает их использование из области видимости. И хорошей практикой является разделение ваших контроллеров и модулей на отдельные файлы для организации.
Мой вопрос, если у меня есть файл контроллера
myCtrl.js
(function(){
"use strict";
app.controller("myCtrl", ['$scope', function($scope) {
$scope.firstName = "John";
$scope.lastName = "Doe";
}]);
})();
директива файл
myDirective.js
(function(){
"use strict";
app.directive("w3TestDirective", function() {
return {
template : "I was made in a directive constructor!"
};
});
})();
Что бы лучшая практика для объявления модуля в отдельном файле
myModule.js
Если это оставить в глобальном масштабе, так что ничего может получить доступ к нему следующим образом:
var app = angular.module("myApp", []);
Или есть способ обернуть это чем-то вроде IIFE, чтобы сохранить его в глобальном масштабе и все же быть доступным для других файлов?
Так один файл имеет модуль 'angular.module ("MyApp", [ "myApp.myCtrl", "myApp.w3TestDirective"]);' и у вас есть либо контроллер, либо директива, завернутая в жизнь IIFE, которую вы показывали, когда модуль был назначен «var app», как вы показали? Я думаю, я до сих пор не понимаю, почему определение модуля не отображается глобально, если это делается так. – user2719805
Потому что у него нет 'var app = angular.module (...)'. Если у вас нет 'var ...' или 'function ...' в области JS-файла, ничего не отображается в глобальной области. Угловая была разработана таким образом, что позволяет писать приложение, не раскрывая ничего для глобального масштаба, однако для удобочитаемости и некоторых проблем ООП может быть полезно иметь локальные переменные и функции, завернутые в IIFE. – estus