1

プロジェクトでangular uiルーターとコーチポテトを使用します。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 でサーバーからデータ (状態) を取得する方法

4

1 に答える 1

0

要点は次のとおりです。

  • プロバイダー構成セクションにサービスを挿入することはできません。
  • プロバイダーのサービスを初期化するセクションにサービスを挿入できます。

詳細:

Angular フレームワークには 2 フェーズの初期化プロセスがあります。

フェーズ 1: 構成

このconfigフェーズでは、すべてのプロバイダーが初期化され、すべてのconfigセクションが実行されます。セクションには、プロバイダー オブジェクトを構成するコードが含まれているconfig場合があるため、プロバイダー オブジェクトを挿入できます。ただし、プロバイダーはサービス オブジェクトのファクトリであるため、この段階ではプロバイダーは完全に初期化/構成されていません - > この段階でプロバイダーにサービスの作成を依頼することはできません -> 構成段階では使用できません/サービスを注入します。このフェーズが完了すると、すべてのプロバイダーの準備が整います (構成フェーズの完了後は、プロバイダーの構成を行うことはできません)。

フェーズ 2: 実行

runフェーズ中に、すべてのrunセクションが実行されます。この段階で、プロバイダーは準備が整い、サービスを作成できます -> 実行フェーズでは、サービスを使用/挿入できます。

例:

1. $http サービスをプロバイダー初期化関数に挿入しても機能しません

angular.module('myModule').provider('myProvider', function($http) {
    // SECTION 1: code to initialize/configure the PROVIDER goes here (executed during `config` phase)
    ...

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

        return myService;
    };
});

フェーズ$http中に実行される関数にサービスを注入しようとしているため、エラーが発生します。config

Uncaught Error: Unknown provider: $http from services 

このエラーが実際に言っていることは$httpProvider、サービスの作成に使用される$httpがまだ準備できていないということです (まだconfigフェーズにあるため)。

2. $http サービスをサービス初期化関数に挿入すると、次のように機能します。

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

runフェーズ中に実行されるサービス初期化関数にサービスを挿入しているため、このコードは機能します。

注:ここから無断転載です

于 2013-09-29T13:16:07.223 に答える