我遇到了一个问题,即将我的AngularJS应用程序的逻辑分成多个文件,这给我带来了一个问题,即只有最后一个可以工作,而之前的可能会被跳过。
这里是index.html包含:
<script src="js/app.js"></script>
<script src="js/app.config.js"></script>
<script src="js/controllers/HomeController.js"></script>
每个文件包含非常少量的逻辑:
初始化:
angular.module('sportcial', ['ionic'])
.run(function run($ionicPlatform) {
alert(2);
$ionicPlatform.ready(function() {
// Hide the accessory bar by default (remove this to show the accessory bar above the keyboard
// for form inputs)
if(window.cordova && window.cordova.plugins.Keyboard) {
cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
}
if(window.StatusBar) {
StatusBar.styleDefault();
}
});
});
配置:
angular.module('sportcial', ['ionic']).config(function configApp($ionicConfigProvider) {
alert(1);
$ionicConfigProvider.tabs.position('bottom');
});
HomeController中:
angular.module('sportcial', ['ionic'])
.config(function config($stateProvider, $urlRouterProvider) {
alert(3)
})
.controller('HomeController', ['$scope', function HomeController($scope) {
var home = this;
}]
);
只有最后一个触发警报(3)......
我在这里想念的是什么? :)
答案 0 :(得分:7)
您正在覆盖每个文件中的sportcial
模块。
使用setter语法
angular.module("moduleName", [moduleDependencies, ..])
创建模块。
如果要向现有模块添加内容,则需要调用getter:
angular.module("moduleName")
例如,您需要将配置文件更新为:
angular.module('sportcial').config(function configApp($ionicConfigProvider) {
alert(1);
$ionicConfigProvider.tabs.position('bottom');
});
答案 1 :(得分:1)
任何angular module只应定义一次及其依赖项:
angular.module('sportcial', ['ionic'])
但是可以根据需要通过调用没有依赖项的module
来多次检索:
angular.module('sportcial').config(....
angular.module('sportcial').controller(....
您必须确保在前包含依赖项的模块定义,包括同一模块的所有其他文件。
另见'Creation versus Retrieval':
请注意使用
angular.module('myModule', [])
将创建 模块myModule
并覆盖任何名为myModule
的现有模块。使用angular.module('myModule')
检索现有模块
答案 2 :(得分:1)
您在每个文件中声明一个新模块。
设置模块的角度语法为:
angular.module('moduleName', dependenciesArray);
获取模块并随后定义模块的语法如下:
angular.module('moduleName');
从配置文件和控制器文件中删除具有离子依赖性的数组。