我正在进行一个具有特定身份验证的项目,该项目已经在Ionic中运行。我必须为只适用于web设备的管理面板实现同样的功能,所以我已经安装了所有的依赖项,配置了应用程序,并在ZURB Foundation for Apps 1.1中完成了HTML/CSS的工作。现在我被困在控制器和服务的实现上。
我阅读了官方文档,对自定义控制器和服务没有太多解释,所以我在网上几乎没有找到解释应用程序基础结构的文本。我还发现了一个结构如下的示例应用程序:在ZURB FOUNDATION FOR APPS中组织角度文件,并从这里复制了每个页面的示例文件:FOUNDATION FOR APPS Template
因此,我将About、Contact、Home和Shared文件夹放在assets/js中。
因此,例如Shared文件夹包含controllers.js文件,该文件的代码如下:
(function () {
'use strict';
var controllers;
AppCtrl.$inject = ['$scope'];
function AppCtrl($scope) {
// This is a shared controller because its the application parent controller
}
controllers = {
AppCtrl: AppCtrl
};
angular.module('SharedModule').controller(controllers);
})
module.js文件包含以下内容:
(function () {
'use strict';
angular.module('SharedModule', [ /* Dependencies to be shared everywhere */ ]);
})
app.js文件的代码与生成的文件几乎相同,只是指定了自定义模块:
(function() {
'use strict';
angular.module('application', [
'ui.router',
'ngAnimate',
//foundation
'foundation',
'foundation.dynamicRouting',
'foundation.dynamicRouting.animations',
// My modules
'SharedModule',
'ContactModule',
'AboutModule',
'HomeModule'
])
.config(config)
.run(run)
;
config.$inject = ['$urlRouterProvider', '$locationProvider'];
function config($urlProvider, $locationProvider) {
$urlProvider.otherwise('/');
$locationProvider.html5Mode({
enabled:false,
requireBase: false
});
$locationProvider.hashPrefix('!');
}
function run() {
FastClick.attach(document.body);
}
})();
所以现在,当我运行应用程序时,我会得到以下错误:
未捕获错误:[$injector:moduler]未能实例化模块应用程序由于:错误:[$injector:moduler]未能实例化模块HomeModule由于:错误:[$injector:nomod]模块"HomeModule"不可用!您要么拼错了模块名称,要么忘记了加载它。如果注册模块,请确保指定依赖关系作为第二个参数。
任何帮助都将不胜感激,谢谢。
我解决了这个问题。
我试图逐个删除模块,以测试各个模块是否存在问题,但出现了相同的错误,所以我也检查了各个文件,但这些文件看起来与示例应用程序中的相同。然后,我检查了是否调用了依赖项,但由于它们不像在常规AngularJS应用程序中那样在索引文件中调用,所以我比较了gullfile.js并给出了解决方案:在appJS数组中,我必须包含.js文件的路径,所以gullfile.js的一部分现在看起来是这样的:
appJS: [
'client/assets/js/app.js',
// Load my modules
'client/assets/js/*/module.js',
'client/assets/js/*/controllers.js',
'client/assets/js/*/factories.js',
'client/assets/js/*/services.js',
'client/assets/js/*/directives.js'
]