如何从Angular.js中的另一个模块调用模块工厂?

时间:2013-05-22 03:03:12

标签: angularjs requirejs

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

干杯

1 个答案:

答案 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可用于依赖注入。