9

Ich brauche $http Service in Config-Methode. Aber ich kann nicht $http in Config verwenden, ich bekomme unknown Provider Fehlermeldung.

Mein Code:

.config(function($http, $routeProvider, $provide) { 
    $http.get("sampleslist.js").success(function(data) { 
     var loop = 0, currentRoute; 

     for (loop = 0; loop < data[loop].pages.length; loop++) { 
      currentRoute = data[loop].pages; 

      var routeName = "/" + currentRoute[loop].name; 
      $routeProvider.when(routeName, { 
       templateUrl:"/" + currentRoute.name + ".html", 
      }) 
     } 
    }) 

    app = {controller: $controllerProvider.register} 
}) 

Können Sie bitte diese die Lösung zur Verfügung stellen?

+3

Nun verwenden, wie Sie gesagt haben, können Sie nicht mehr als $ http in der Konfigurationsphase verwenden. Sie können es jedoch in der Run-Phase verwenden. –

+1

Mögliche Duplikat [Inject Service in app.config] (http://stackoverflow.com/questions/15937267/inject-service-in-app-config) – scokmen

Antwort

3

Wenn brauchen nur AJAX-Request, damit Sie tatsächlich $ HTTP-Server aus dem neuen Injektor abrufen können:

.config(function($routeProvider, $provide) { 
    var $http = angular.injector(['ng']).get('$http'); 
    $http.get("sampleslist.js").success(

     function(data) { 

      var loop = 0, 
       currentRoute; 

      for (loop = 0; loop < data[loop].pages.length; loop++) { 

       currentRoute = data[loop].pages; 

       var routeName = "/" + currentRoute[loop].name; 

       $routeProvider.when(routeName, { 

        templateUrl: "/" + currentRoute.name + ".html", 

       }) 
      } 
     }) 

    app = { 
     controller: $controllerProvider.register, 
    } 
}) 
+0

$ routeProvider.when (Route, { }) Diese Funktion trifft nicht, warum? –

+0

Ich würde nicht einmal vorschlagen, dass die OP die (absichtliche) Begrenzung umgeht, die Angular eingeführt hat; Selbst dann ist "Erfolg" eine veraltete Methode und sollte nicht verwendet werden. Zugriff auf '$ http' auf diese Weise scheint gefährlich ... –

3

können Sie nur Anbieter in .config injizieren. aber $ http ist nicht Provider, Ihre eckige App sucht nach Provider namens $ http, aber es ist nicht in der Lage, es zu finden, so dass es Fehler warf.

Wie löst man das ??

Wenn Sie jeden Ajax-Aufruf, bevor Sie Ihren Winkelregler Laden Sie es in .run

+0

' .run' läuft garantiert * nachdem * die eckige Seite geladen hat, nicht vorher .. –

+0

nach meinem Wissen/lesen das ist er Fluss der eckigen Arbeit. Oben wollte ich sagen, dass Sie etwas vor dem Laden Ihres Controllers ausführen können. Ich hätte eher Daten erwähnen sollen als das Laden von Seiten. app.config() app.run() Richtlinie der Kompilierung Funktionen app.controller() Richtlinie der Link-Funktionen (auch hier gefunden if) (wenn sie in der dom zu finden sind) –

+0

bearbeitet die Antwort –

4

tun können, es ist keine gute Praxis $http im .config zu verwenden. Man kann es entweder in .run verwenden oder den Dienst unter Verwendung von .service oder .factory nutzen.

+0

Es geht nicht darum, Die Übung. Wir können $ http in .config nicht injizieren. –

1

Haben Sie die Kontrolle über sampleslist.js? Wenn ja, laden Sie es einfach mit dem Tag herunter und weisen Sie Variablen Werte zu.

//sampleslist.js 
var samplelist = {...} 

//index.html 
<script src="samplelist.js"></script> 

Dann könnte man diese Werte zu Winkel injizieren angular.constant mit oder variable samplelist

+0

Danke für dein Update - Yariash –

Verwandte Themen