我在另一个模块的一个模块中调用工厂时遇到问题。我正在使用angular.js + require.js。 这是我的代码 第1单元:
define(['angular', 'app/admin/app.admin', 'app/admin/account/services'], function (angular, app, services) {
app.controller('MainCtrl', ['$scope', 'providerService', function ($scope, providerService) {
$scope.showMe = false;
$scope.provider = providerService.Providers;
}]);
return app;
});
第2单元
define(['angular', 'app/admin/config/index'], function (angular) {
'use strict';
var service = angular.module('app.admin.account.services', []);
service.factory('providerService', ['app.admin.config',
function (config) {
var providers = [
{ name: 'google+', url: config.AUTH_URL + '/google' },
{ name: 'facebook', url: config.AUTH_URL + '/facebook' }
];
return {
Providers: providers
};
}
]);
return service;
});
当我尝试从模块1调用模块2中的providerService时,我收到一条错误,说ProviderService不存在。有人能告诉我这里做错了吗?
干杯
答案 0 :(得分:16)
将RequireJS和AngularJS一起使用是完全可以的,但是术语“模块”在两者之间具有不同的含义,并且在涉及依赖时有点令人困惑。
在RequireJS中,“模块”是封装一段代码的典型Javascript文件。您可以使用RequireJS定义依赖项,以便将其他模块作为依赖项传入/周围,并确保正确的脚本加载顺序。
在AngularJS中,术语“模块”特指一个AngularJS“模块”,它是许多控制器/服务/指令等声明的容器。
使用RequireJS定义脚本文件的顺序和依赖关系。然后,您还需要告诉Angular您的模块所依赖的“Angular模块”,实质上是导入所有控制器/服务/指令。
在' app / admin / app.admin '中,确保通过传入' app.admin.account.services '来定义AngularJS模块的依赖项模块作为第二个参数,例如
var app = angular.module('app.admin', ['app.admin.account.services']);
然后将' app.admin.account.services '模块导入主模块,使providerService
可用于依赖注入。