2013-05-22 98 views
8

我在另一个模块的一个模块中调用工厂时遇到问题。我正在使用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是不存在的。有人能告诉我我在这里做错了什么吗?

干杯

+2

应用程序模块在哪里定义?它不在这个代码中。如果你还没有,那么你需要声明'app.admin.account.services'和'app'的依赖关系 –

回答

16

这是完全正常使用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可供依赖注入。

相关问题