9

Potrzebuję użyć usługi $http w metodzie konfiguracyjnej. Ale nie mogę użyć $http w konfiguracji, otrzymuję komunikat o błędzie unknown Provider.Nieznany dostawca http w Angular

Mój kod:

.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} 
}) 

Czy należy dostarczyć rozwiązanie tego problemu?

+3

Cóż, jak pan powiedział, nie można użyć $ http w fazie konfiguracji. Możesz go użyć w fazie uruchamiania. –

+1

Możliwy duplikat [wstrzyknąć usługi w app.config] (http://stackoverflow.com/questions/15937267/inject-service-in-app-config) – scokmen

Odpowiedz

3

Jeśli wystarczy, aby żądania AJAX rzeczywiście można pobrać serwera $ http z nowego wtryskiwacza:

.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 (routeName { }) Ta funkcja nie działa, dlaczego? –

+0

Nie sugerowałbym nawet, żeby OP ominął (umyślne) ograniczenie, które wprowadził Angular; nawet wtedy, 'success' jest przestarzałą metodą i nie powinno być używane. Uzyskiwanie dostępu do '$ http' w ten sposób wydaje się niebezpieczne ... –

3

można wstrzykiwać tylko dostawców w pliku .config. ale $ http nie jest dostawcą, twoja aplikacja kątowa szuka dostawcy o nazwie $ http, ale nie jest w stanie go znaleźć, więc wystąpił błąd.

Jak rozwiązać ten problem?

Jeśli chcesz otrzymać ajax wywołanie przed załadunkiem kątowej kontrolera można to zrobić w .run

+0

' .run' ma gwarancję uruchomienia * po * załadowaniu strony kątowej, nie wcześniej .. –

+0

według mojej wiedzy/czytania to jest przepływ pracy kanciastej. Powyżej chciałam powiedzieć, że możesz uruchomić coś przed załadowaniem kontrolera. Powinienem wspomnieć o danych, a nie o wczytaniu strony. app.config() app.run() dyrektywie funkcje kompilacji (jeśli znajdują się w dom) app.controller() funkcje Link dyrektywy jest (ponownie, jeśli znaleziono) –

+0

edytowany odpowiedź –

4

To nie jest dobra praktyka, aby korzystać $http w .config. Można go użyć w usłudze .run lub skorzystać z usługi, korzystając z usługi .service lub .factory.

+0

Nie chodzi o praktyka. Nie możemy wstrzyknąć $ http w .config. –

1

Czy masz kontrolę nad sampleslist.js? Jeśli tak, może po prostu pobierz go za pomocą tagu i przypisz wartości do zmiennych.

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

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

Następnie można wstrzykiwać tej wartości kątowej za pomocą angular.constant lub po prostu użyć zmiennej samplelist

+0

Dziękujemy za aktualizację - Yariash –

Powiązane problemy