2013-05-22 2 views
8

Ich habe Probleme mit dem Aufruf einer Fabrik in einem Modul von einem anderen Modul. Ich benutze angular.js + require.js. Hier ist mein Code Modul 1:Wie ruft man Modul Factory von einem anderen Modul in 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; 
}); 

Modul 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; 
}); 

Wenn ich versuche, 2 von providerService in Modul aufrufen Modul 1. Ich habe einen Fehler sagen providerService nicht da ist. Kann mir jemand sagen, was ich hier falsch gemacht habe?

Prost

+2

Wo ist das App-Modul definiert? Es ist nicht in diesem Code. Wenn Sie dies noch nicht getan haben, müssen Sie 'app.admin.account.services' und eine Abhängigkeit von' app' deklarieren –

Antwort

16

Es ist völlig in Ordnung RequireJS und AngularJS zusammen zu verwenden, aber der Begriff „Modul“ hat unterschiedliche Bedeutung zwischen den beiden und ist ein wenig verwirrend, wenn es um Abhängigkeiten kommt.

In RequireJS ist ein "Modul" eine typische Javascript-Datei, die ein Stück Code einkapselt. Sie definieren die Abhängigkeiten mit RequireJS, um andere Module als Abhängigkeiten zu übergeben und um eine korrekte Reihenfolge beim Laden von Skripten sicherzustellen.

In AngularJS bedeutet der Begriff "Modul" speziell ein AngularJS- "Modul", das ein Container für eine Reihe von Deklarationen von Steuerungen/Diensten/Direktiven usw. ist.

Sie verwenden RequireJS, um die Reihenfolge und Abhängigkeiten Ihrer Skriptdateien zu definieren. Sie müssen dann Angular mitteilen, auf welche "Winkelmodule" Ihr Modul angewiesen ist, und im Wesentlichen alle Controller/Dienste/Anweisungen mit importieren.

In 'app/admin/app.admin' stellen Sie sicher, die Abhängigkeiten für Ihre AngularJS Modul definieren, indem Sie in dem 'app.admin.account.services' -Modul als zweiten Parameter übergeben z.B.

var app = angular.module('app.admin', ['app.admin.account.services']); 

die dann ‚app.admin.account.services‘ Modul in Ihrem Hauptmodul machen Ihre providerService zur Verfügung, die für Dependency Injection importiert.