如何从Angular.js中的其他模块调用模块工厂?
问题描述:
我在另一个模块的一个模块中调用工厂时遇到问题。我正在使用angular.js + require.js。 这里是我的代码 模块1:如何从Angular.js中的其他模块调用模块工厂?
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;
});
当我打电话providerService模块2从模块1.我得到一个错误说providerService是不存在的。有人能告诉我我在这里做错了什么吗?
干杯
答
这是完全正常使用RequireJS和AngularJS在一起,但是术语“模块”有两个之间的不同含义,是有点混乱,当涉及到的相关性。
在RequireJS中,“module”是封装了一段代码的典型Javascript文件。您可以使用RequireJS定义依赖关系,以便将其他模块作为依赖关系传入/传出,并确保正确的脚本加载顺序。
在AngularJS中,术语“模块”具体指AngularJS“模块”,它是许多控制器/服务/指令等声明的容器。
您使用RequireJS来定义脚本文件的顺序和依赖关系。然后,您还需要告诉Angular您的模块依赖于哪个“Angular模块”,从本质上导入所有的控制器/服务/指令。
在“应用程序/管理/ app.admin”确保你在“app.admin.account.services”模块中传递的第二个参数定义了你的AngularJS模块的依赖性如
var app = angular.module('app.admin', ['app.admin.account.services']);
那么这将导入“app.admin.account.services”模块到主模块让您providerService
可供依赖注入。
应用程序模块在哪里定义?它不在这个代码中。如果你还没有,那么你需要声明'app.admin.account.services'和'app'的依赖关系 –