9

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

干杯

4

1 回答 1

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可以进行依赖注入。

于 2013-05-22T07:11:06.163 回答