2013-05-22 2 views
8

Ho problemi con chiamare una fabbrica in un modulo da un altro modulo. Sto usando angular.js + require.js. Ecco il mio codice Modulo 1:Come chiamare la produzione del modulo da un altro modulo 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; 
}); 

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

Quando provo a chiamare providerService nel modulo 2 dal modulo 1. Ho ottenuto un errore dire providerService non c'è. Qualcuno può dirmi cosa ho fatto di sbagliato qui?

Acclamazioni

+2

Dove è definito il modulo dell'app? Non è in questo codice. Se non lo hai già fatto, devi dichiarare 'app.admin.account.services' e una dipendenza da' app' –

risposta

16

È perfettamente bene usare RequireJS e AngularJS insieme, ma il termine "unità" ha un significato differente tra i due e è un po 'di confusione quando si tratta di dipendenze.

In RequireJS un "modulo" è un tipico file Javascript che incapsula un pezzo di codice. Si definiscono le dipendenze usando RequireJS per passare dentro/attorno ad altri moduli come dipendenze e garantire il corretto ordine di caricamento dello script.

In AngularJS il termine "modulo" indica specificamente un "modulo" AngularJS, che è un contenitore per un numero di dichiarazioni di controller/servizi/direttive, ecc.

Si utilizza RequireJS per definire l'ordine e le dipendenze dei file di script. È inoltre necessario dire ad Angular di quale "modulo angolare" dipende il proprio modulo, in sostanza importando tutti i controller/servizi/direttive insieme ad esso.

In 'app/admin/app.admin' assicurarsi di definire le dipendenze per il modulo AngularJS passando nel modulo 'app.admin.account.services' come un secondo parametro per esempio

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

che poi importare il modulo 'app.admin.account.services' nel vostro modulo principale rendendo il vostro providerService disponibile per l'iniezione di dipendenza.