2013-07-25 7 views
26

Angenommen, ich habe zwei Module für AngularJS, z.B. foo und bar, und beide definieren einen Dienst mit der Bezeichnung baz.Wie werden zwei AngularJS-Dienste mit demselben Namen aus verschiedenen Modulen verwendet?

In meiner Anwendung, die ich von ihnen abhängig sind, indem er sagte:

var app = angular.module('app', [ 'foo', 'bar' ]); 

Dann kann ich versuchen, den baz Dienst in einem Controller zu verwenden, indem Sie

app.controller('blaController', [ '$scope', 'baz', function($scope, baz) { 
    // ... 
}]); 

Wie kann ich die von den beiden definieren Dienste, die ich gerne nutzen würde? Gibt es etwas wie einen voll qualifizierten Namen?

+2

mögliche Duplikate von [So verweisen Sie auf Werte mit demselben Namen aus verschiedenen Modulen] (http://stackoverflow.com/questions/15342657/how-to-reference-values-with-the-same-name-from- different-modules) – Stewie

+0

mögliches Duplikat von ["Namespacing" -Dienstleistungen in AngularJS] (http://stackoverflow.com/questions/14909474/namespacing-services-in-angularjs) –

+0

mögliches Duplikat von [Modules and name clashes in Angularjs] (http://stackoverflow.com/questions/13406791/modules-and-name-clashes-in-angularjs) – shannon

Antwort

37

Der Service Locator sucht die Services nach Namen (angularjs guide DI). Allerdings "Namespacing" services in AngularJS:

Ab heute AngularJS keine Namespace-Kollisionen für Dienste also, wenn Sie haben zwei verschiedene Module mit dem Dienst mit dem Namen die gleiche Art und Weise und Sie sind beide Module in Ihrer Anwendung behandeln, nur ein Service wird verfügbar sein.

Ich denke, man kann den voll qualifizierten Namen „von Hand“: Name des Dienstes foo.baz und bar.baz statt Ebene baz. Es ist eine Art Selbsttäuschung. Darüber hinaus macht das Schreiben auf diese Weise den Namespace nicht wirklich, aber eine andere Person, die den Code liest, könnte das denken.

+1

Ich habe vergessen zu erwähnen, dass Sie dies mit closures '(function() {Modul Deklaration}());' –

Verwandte Themen