Рассмотрим мой код ниже, который я не понимаю полностью, поскольку я делал много "обезьян, смотрящих обезьяну", глядя на коды других людей.
Пожалуйста, исправьте мою мысль, мы пойдем;
В app.js, когда компилятор видит это
angular
.module('angApp', ['ngRoute', 'MainMenuCtrl'])
.config(['$routeProvider', routeProvider]);
Он определяет модуль, и поскольку его идентификатор совпадает с тем, что объявлено в атрибутах ng-app тега html-тега, это "основной" модуль. если это правильно, я мог бы назвать его mainMod вместо angApp, чтобы изменить его реальный смысл.
В контроллерах.js, когда компилятор видит это
var myApp = angular.module('MainMenuCtrl', ['ngAnimate']);
myApp.controller('MainMenuCtrl', ['$scope', '$http', MainMenuCtrl]);
Первая строка определяет новый модуль (ранее объявленный как зависимость для angApp на шаге 1), называемый MainMenuCtrl. Если это правильно, я могу настроить mainMenuMod вместо MainMenuCtrl.
Вторая строка вводит контроллер MainMenuCtrl, это имя упоминается два раза в этой строке, первое упоминание - это ссылка на модуль, который был определен только в первой строке, второе упоминание - это имя функции конструктора. Если это правильно, я могу изменить первый MainMenuCtrl на MainMenuMod. Поэтому новые имена лучше описывают семантику.
angular
.module('mainMod', ['ngRoute', 'MainMenuMod'])
.config(['$routeProvider', routeProvider]);
var whatever = angular.module('MainMenuMod', ['ngAnimate']);
whatever.controller('MainMenuMod', ['$scope', '$http', MainMenuCtrl]);
Я прав или неправ? благодаря
//---app.js-------------------
(function () {
'use strict';
angular
.module('angApp', ['ngRoute', 'MainMenuCtrl'])
.config(['$routeProvider', routeProvider]);
})();
function routeProvider ($routeProvider) {
$routeProvider.when('/menuItems', {
url: "/menuItems",
templateUrl: 'views/mainMenu.html',
controller: 'MainMenuCtrl'
}).when('/first_page', {
url: "/first_page",
templateUrl: 'views/first_page.html',
controller: 'FirstPageController'
}).when('/second_page', {
url: "/second_page",
templateUrl: 'views/second_page.html',
controller: 'SecondPageController'
})
.otherwise({ //home page
redirectTo: '/menuItems'
});
}
//---controllers.js-------------------
var myApp = angular.module('MainMenuCtrl', ['ngAnimate']);
myApp.controller('MainMenuCtrl', ['$scope', '$http', MainMenuCtrl]);
function MainMenuCtrl($scope, $http) {
$http.get('js/mainMenu.json').then(
function (response) {
$scope.menuItems = response.data;
},
function (error) {
alert("http error");
}
)
//---index.html--------------
<head>
<meta charset="UTF-8">
<title>Document</title>
<link rel="stylesheet" href="css/index.css">
<base href="http://localhost:63342/project_student/">
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.9/angular.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.9/angular-route.min.js"></script>
<script src="https://code.angularjs.org/1.5.0-rc.1/angular-animate.min.js"></script>
<script src="js/app.js"></script>
<script src="js/controllers/controllers.js"></script>
<script src="js/controllers/headerCtrl.js"></script>
<script src="js/controllers/first_page.js"></script>
<script src="js/controllers/second_page.js"></script>
<meta name="viewport" content="width=device-width" />
</head>
Имена для модулей и для всего остального, не мешают, так что наличие MainMenuCtrl
контроллера и mainMenuCtrl
модуля (модули, как правило, следует PascalCase именования, разделенные точки для пространства имен) в порядке и однозначный. Добавление имени модуля с суффиксом "Mod" или "Module" является избыточным.
Семантически правильно иметь модуль mainMenu
который загружает модуль mainMenuCtrl
если есть вероятность, что они будут протестированы отдельно.