Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用ui路由器时,在应用程序配置中使用$http服务_Javascript_Angularjs - Fatal编程技术网

Javascript 使用ui路由器时,在应用程序配置中使用$http服务

Javascript 使用ui路由器时,在应用程序配置中使用$http服务,javascript,angularjs,Javascript,Angularjs,我在项目中使用angular ui router和coach potato,我希望从服务器端加载ui路由器状态并添加到angular app.Config中的状态提供程序,但无法将$http服务注入app.Config函数,我的代码如下: var app = angular.module('app', [ 'ui.router.compat']); app.config(['$stateProvider', '$routeProvider', '$urlRouterProvider', '$ht

我在项目中使用angular ui router和coach potato,我希望从服务器端加载ui路由器状态并添加到angular app.Config中的状态提供程序,但无法将$http服务注入app.Config函数,我的代码如下:

var app = angular.module('app', [ 'ui.router.compat']);
app.config(['$stateProvider', '$routeProvider', '$urlRouterProvider', '$http',
  function ($stateProvider, $routeProvider, $urlRouterProvider, $http) {

      $urlRouterProvider
        .when('/c?id', '/contacts/:id')
        .otherwise('/');

      $routeProvider
        .when('/user/:id', {
            redirectTo: '/contacts/:id'
        });

      var get = $http.get('/api/Values/');

      get.success(function (data) {
            list = data.result;
        });

      var populateStates = function () {

          angular.forEach(list, function(item) {
              $stateProvider.state(item);

              angular.forEach(item.subMenus, function(sub) {
                  $stateProvider.state(sub);
              });
          });
      };

      populateStates();
  }]);
如何从app.Config中的服务器获取数据状态

底线是: 无法将服务注入到提供程序配置部分。 您可以将服务注入初始化提供者服务的部分。 细节: Angular framework有两个阶段的初始化过程:

第一阶段:配置

在配置阶段,初始化所有提供程序,并执行所有配置部分。配置部分可能包含配置提供程序对象的代码,因此它们可以被注入提供程序对象。但是,由于提供程序是服务对象的工厂,并且在此阶段提供程序未完全初始化/配置->在此阶段不能要求提供程序为您创建服务->在配置阶段不能使用/注入服务。此阶段完成后,所有提供程序都已准备就绪,在配置阶段完成后,无法再进行提供程序配置

第2阶段:运行

在运行阶段,执行所有运行部分。在这个阶段,提供者已经准备好,可以创建服务->在运行阶段,您可以使用/注入服务

示例: 一,。将$http服务注入提供程序初始化函数将不起作用

由于我们试图将$http服务注入到配置阶段执行的函数中,我们将得到一个错误:

Uncaught Error: Unknown provider: $http from services 
这个错误实际上是说,用于创建$http服务的$httpProvider尚未准备好,因为我们仍处于配置阶段

二,。将$http服务注入服务初始化函数将起作用:

由于我们现在将服务注入到服务初始化函数中,该函数在运行阶段执行,因此该代码将正常工作


注意:这是无耻地从tnx复制来的答案,但在配置完成之前如何调用服务,因为我想从服务器获取状态并添加到stateProvider
Uncaught Error: Unknown provider: $http from services 
angular.module('myModule').provider('myProvider', function() {
    // SECTION 1: code to initialize/configure the PROVIDER goes here (executed during `config` phase)
    ...

    this.$get = function($http) {
        // code to initialize/configure the SERVICE goes here (executed during `run` stage)

        return myService;
    };
});