2013-05-22 10 views
8

Mam problemy z wywołaniem fabryki w jednym module z innego modułu. Używam angular.js + require.js. Oto mój kod Moduł 1:Jak wywołać moduł fabryki z innego modułu w 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; 
}); 

Moduł 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; 
}); 

Gdy próbuję zadzwonić providerService w module 2 z modułu 1. Mam błąd powiedzieć providerService nie ma. Czy ktoś może mi powiedzieć, co zrobiłem źle tutaj?

Cheers

+2

Gdzie jest zdefiniowany moduł aplikacji? To nie jest w tym kodzie. Jeśli jeszcze tego nie zrobiłeś, musisz zadeklarować 'app.admin.account.services' i zależność' app' –

Odpowiedz

16

Jest perfekcyjnie używać RequireJS i angularjs razem, jednak termin „moduł” ma inne znaczenie między nimi i jest trochę mylące, jeśli chodzi o zależności.

W RequireJS "moduł" jest typowym plikiem JavaScript, który hermetyzuje fragment kodu. Zdefiniowanie zależności za pomocą RequireJS w celu przekazywania w/wokół innych modułów jako zależności i zapewnienia prawidłowego porządkowania obciążenia skryptu.

W AngularJS termin "moduł" w szczególności oznacza moduł "AngularJS", który jest kontenerem dla wielu deklaracji kontrolera/usług/dyrektywy itp.

Używasz RequireJS do definiowania kolejności i zależności plików skryptów. Następnie należy poinformować firmę Angular, że "moduły kątowe", z których korzysta moduł, zasadniczo importują wszystkie kontrolery/usługi/dyrektywy wraz z nim.

W „app/admin/app.admin” upewnij się, że określenie zależności dla modułu angularjs przekazując w module „app.admin.account.services” jako drugi parametr np

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

To będzie następnie importować „app.admin.account.services” modułu do głównego modułu podejmowaniu dostępny providerService do wstrzykiwania zależności.

Powiązane problemy