2017-04-14 3 views
0

Ich habe ein extremes Randfall-Szenario, wo ich eine Callback-Methode habe, die ich während der Konfiguration definieren muss. Was bedeutet, kein Bereich, keine Fabriken, etc ... Meine Arbeit besteht darin, den Root-Injektor ($ Injektor) zu verwenden und meine anderen Module zur Laufzeit zu bekommen.

Allerdings, wenn ich $ injector.get ('myServiceName') in meinem Rückruf (nach der Anwendung läuft) aufrufen, bekomme ich "unbekannter Anbieter". Derselbe Dienst hat kein Problem (und wird tatsächlich) in ein injiziert werden, bevor meine Codezeile ausgeführt wird. Wenn ich $ injector.get ("myServiceNameProvider") anrufe, kann ich den Provider zurück in meinen Callback bekommen. Aber ein anderer Dienst, der nur eine Fabrik hat, kann ich überhaupt nicht bekommen.

Also in dieser extrem schlechten Praxis, wie kann ich den Service, den ich konfiguriert habe, hängen. Heck Ich kann nicht einmal scheinen $ rootScope.

+0

habe gerade versucht :-( $ injector.invoke ([ 'myServiceName', function (myServiceVar) {}]) mit dem gleichen Ergebnis zu berufen; Dagnabit .. –

Antwort

0

Angular inits Anbieter zuerst, dann Fabriken/Dienstleistungen - Dienstleistungen sind nicht verfügbar in app.config.

Sie können wie folgt deo:

app.config(... 
    window.on('scroll', function() { 
    // this is executed later 
    $injector.get()... 
    }) 

Oder nutzen app.run wo Dienste zur Verfügung stehen.

+0

yah das ist eactly, was ich tat, die Dienste sind immer noch nicht auffindbar ... Und ich habe keine Wahl, meinen Anruf zu app.run zu verschieben ... Ich muss den Rückruf als Konfiguration für einen ANDEREN Dienst in seiner .config übergeben ... Es gibt ein architektonischer Fehler in einem Angular-Dienst, der einen Callback in einer Config benötigt, aber das ist, womit ich arbeiten muss: - (... \ –

0

Ich denke, ich hatte ähnliches Problem vor ein paar Monaten ... Ich muss Paniermehl bauen, aber sie mussten in config Phase (ui-router) erstellt werden. Ich habe es so (breadcrumbs-generation-service.provider.js) getan:

var somethingYouHaveToHaveLater = undefined; 
function BreadcrumbsGenerationService() { 
    this.createStateData = createStateData; 

    function createStateData (arg) { 
     somethingYouHaveToHaveLater = arg; 
    }; 
} 

function BreadcrumbsGenerationServiceProvider() { 
    this.$get = function BreadcrumbsGenerationServiceFactory() { 
     return new BreadcrumbsGenerationService(); 
    } 
} 

angular 
    .module('ncAdminApp') 
    .provider('BreadcrumbsGenerationService', BreadcrumbsGenerationServiceProvider); 

Da Service innerhalb Angular configs verwendet wird, muss als Anbieter injiziert werden in der Konfigurationsphase zur Verfügung stehen: Similar SO Question. Trotz der Tatsache, registriert als BreadcrumbsGenerationService Bedürfnisse als BreadcrumbsGenerationServiceProvider-config Phase injiziert werden und verwendet mit $get():

BreadcrumbsGenerationServiceProvider.$get().createStateData(someParams); 

Aber in der Steuerung, injizieren sie ohne Provider Suffix (BreadcrumbsGenerationServic) und verhält sich wie normale Service.

+0

) aber Sie würden denken, wenn ich $ injector.get ('myService') in meinem Anruf anrufe zurück (das ist gut nach der Konfig ist fertig) es wäre in der Lage, den Service zu lösen .. –

+0

@JoshHandel Ja, denn injizieren ist das gleiche wie gettin g vom injector - aber gib einfach meine Antwort aus, und du wirst es herausfinden :) –

+0

Also ich denke unsere Probleme sind leider etwas anders .. Ich arbeite mit adal, welches eine Config während des config Teils des Bootstrap nimmt. drinnen adal kopiert es die config (nicht durch referenz: - (...) so dass der callback ich handle es kann ich nicht später zuweisen .... IN diesem callback zu tun, was ich tun muss, brauche ich $ scope (wirklich Ich brauche ein paar andere Dienste) .. Wenn ich etwas später zuweisen könnte .. Ich bin auch gekommen, um durch Experimente zu lernen, dass der $ Injektor in app.config ist nicht der gleiche $ Injektor in einen Controller übergeben ...So eckig verwaltet mehrere $ Injektoren: - | –

Verwandte Themen