9

Мне нужно использовать службу $http в режиме конфигурации. Но я не могу использовать $http в config, я получаю сообщение об ошибке unknown Provider.

Мой код:

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

Можете ли вы предоставить решение для этого?

+3

Ну, как вы сказали, вы не можете использовать $ HTTP в фазе конфигурации. Однако вы можете использовать его на этапе запуска. –

+1

Возможный дубликат [Inject службы в app.config] (http://stackoverflow.com/questions/15937267/inject-service-in-app-config) – scokmen

ответ

3

Если нужно просто сделать запрос AJAX вы можете восстановить сервер $ HTTP из нового инжектора:

.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, { }) Почему эта функция не срабатывает? –

+0

Я бы даже не предложил ОП обойти (намеренное) ограничение, которое уложило Угловое; даже тогда «успех» является устаревшим методом и не должен использоваться. Доступ к '$ http' таким образом кажется опасным ... –

3

Вы можете вводить только поставщик в .config файл. но $ http не является провайдером, ваше угловое приложение ищет провайдера с именем $ http, но оно не может его найти, поэтому оно запустило ошибку.

Как решить это?

Если вы хотите какой-либо Ajax вызова до вашего угловой загрузки контроллера вы можете сделать это в .run

+0

' .run' гарантированно работает * после того, как * угловая страница загрузилась, а не раньше .. –

+0

согласно моим знаниям/чтению это он поток угловой работы. Выше я хотел сказать, что вы можете запустить что-то перед загрузкой вашего контроллера. Я должен упомянуть данные, а не загрузку страницы. app.config() app.run() директивы функция компиляции (если они находятся в йоте) app.controller() ссылка функция директивы в (опять же, если найдено) –

+0

редактировал ответ –

4

Это не очень хорошая практика, чтобы использовать $http в .config. Его можно использовать либо в .run, либо использовать услугу, используя либо .service, либо .factory.

+0

Речь не идет о практика. Мы не можем вводить $ http в .config. –

1

У вас есть контроль над sampleslist.js? Если да, возможно, просто скачайте его с помощью тега и присвойте значения переменным.

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

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

Тогда вы могли бы придать эти значения в угловой с помощью angular.constant или просто использовать переменную samplelist

+0

Спасибо за ваше обновление - Yariash –

Смежные вопросы