2014-10-21 11 views
26

Ich möchte auf von einem Anbieter zugreifen (mymodule.provider(...)) ABER Ich brauche solche Abhängigkeit zur Konfig Zeit (so ist es nicht sinnvoll für mich, solche Abhängigkeit in die $get setzen).

Derzeit ich greife nicht $window, und der Grund, warum ich eine solche Abhängigkeit in Config Zeit brauchen, ist, weil ich brauche $window.STATIC_URL zugreifen, die eine Konstante im Fenster ist, und ich verwende es der Staaten Vorlagen konfigurieren ($stateProvider).

Aktueller Code ist:

mymodule.provider('StaticUrl', function() { 
    this.url = function() { return window.STATIC_URL || 'static'; }; 
    this.$get = this.url; 
}); 

Das ist, weil ich einen solchen Wert sowohl in der Konfiguration benötigen und Laufzeit (ich benutze es für mehr als nur die Zustände einrichten, so dass, wenn ich brauche solche URL in einem Controller , Ich importiere es als Abhängigkeit).

//config 
mymodule.config(['StaticUrlProvider', '$stateProvider', function(sup, $sp){ 
    //... 
    $sp.state('main', { 
     templateUrl: sup.url() + 'path/to/template.html' 
    }); 
    //... 
}]); 
//run-time (in this case: a controller) 
mymodule.controller('MyController', ['$scope', 'StaticUrl', function($s, su) { 
    var buildingType = /*a complex expression here*/; 
    $s.buildingPicture = $su + 'path/to/building/pics/' + buildingType + '.png'; 
}]); 

eine vorhandene Datenmenge gegeben, habe ich ein Bild für jeden Eintrag, unter STATIC_URL angeordnet, die zur Verfügung gestellt werden müssen. Das bedeutet, dass ich eine solche Konstante in beiden Stufen verwende.

Wie würde ich es in einer mehr eckigen Weise tun (, d. H. Ohne sich in Globals zu verlassen)? Gibt es eine Möglichkeit, auf von einem Anbieter zuzugreifen, ohne eine moduleerr zu erhöhen?

+2

try Injektion $ windowProvider nennen – harishr

Antwort

50

Inject $windowProvider und $windowProvider.$get()

Verwandte Themen