2

Angular をいじりながら、ファクトリ、サービス、定数、ルーティング、およびその他のコア コンセプトの使用方法をよりよく理解しようとしています。そこで、node、express、jade、angular を使用して簡単なデモ アプリを作成します。

ここで、routeProvider 構成内で値を使用したいと思います。定数を作成しましたが、これは正常に機能します。将来の使用に備えてより柔軟にするために、ファクトリを構築しますが、これは「不明なプロバイダー」で失敗します。これはAngularでのインスタンス化シーケンスの問題ですか? .configファクトリをセクションに挿入できないのはなぜですか? 工場ではなくサービスで同じことを試みる前に、同じエラーが発生しました。単純なタイプミスや構文エラーがなかったことを願っていますが、これまでのところ何も見つかりませんでした。

angular
  .module('main', [
    'ngRoute'
  ])

  .constant('cApp', {
      'defaultPath': '/home'
  })

  .factory('svcState', function(){
      var appState;

      function getState(){
          return appState;
      }

      function init() {
          appState='/home';
      }

      init();

      return{
          getState: getState
      };
  })

  .config(function($routeProvider, svcState, cApp){

      $routeProvider
          .when('/home', {
              templateUrl: "partials/home"
          })
          .when('/info', {
              templateUrl: "partials/info"
          })
          .otherwise({
              //redirectTo: cApp.defaultPath  // this works fine
              redirectTo: svcState.getState   // this fails with "Error: [$injector:unpr] Unknown provider: svcState"
          })

      })

;
4

2 に答える 2

0

これが私が変更したものです:

angular
    .module('main', [
        'ngRoute'
    ])

    .provider('appState', function(){
        var appState;

        this.setState = function(newState) {
            appState = newState;
        };

        this.getState = function() {
            return appState;
        };

        this.$get = function() {
            return appState;
        };

        function init() {appState='/home';}
        init();

    })
    .config(function($routeProvider, appStateProvider){

        $routeProvider
            .when('/home', {
                templateUrl: "partials/home"
            })
            .when('/info', {
                templateUrl: "partials/info"
            })
            .otherwise({
                redirectTo: appStateProvider.getState()
            })

    })

;
于 2015-05-13T08:55:30.110 に答える