2016-05-22 7 views
2

$ urlMatcherFactoryProviderと一致する利用可能なルートの配列を取得するために、私のpublicApp.configの中で$ httpを呼び出そうとしています。

は今のところ、私は彼らがpageUrls = ['about','contact','another-page'];

ようにハードコーディングですが、私は可能なURLの配列を返します。私の急行APIでURLを持っています。 APIのURLは"/page-urls"

です。$http.get('/page-urls')のリクエストはconfig内に作成できますか? $ httpはrun()の中にありますが、$ stateProvider経由でルーティングする前に利用可能なURLのリストが必要です。

(function() { 
    'use strict' 

    var pageUrls = []; 

    var publicApp = angular.module('publicApp', ['ui.router']) 

    publicApp.config(['$stateProvider', '$urlRouterProvider', '$urlMatcherFactoryProvider', function($stateProvider, $urlRouterProvider, $urlMatcherFactoryProvider) { 

     pageUrls = ['about','contact','another-page']; 

     var urls = pageUrls.join('|'); 
     var urlMatcher = $urlMatcherFactoryProvider.compile("/{source:(?:" + urls + ")}"); 


     $stateProvider  
      .state('/', { 
       url: '/', 
       templateUrl: "views/home/home.view.html", 
       controller: "homeCtrl" 
      }) 
      .state('urls', { 
        url: urlMatcher, 
        templateUrl: "views/pages/page.view.html", 
        controller: "pageCtrl" 
       }); 

      $urlRouterProvider.otherwise('/'); 


    }]); 



})(); 
+2

:このような

何かグローバル変数。 configを実行すると利用可能になります – charlietfl

+1

設定後にルータの状態を定義できる代替[router-extras](https://christopherthielen.github.io/ui-router-extras/#/home)があります – charlietfl

+0

私の角型アプリの前にURLの配列を持つjsファイルを追加するだけですか?それは安全な選択肢ですか? – OllyBarca

答えて

2

注射器として$stateProviderを取得するプロバイダを作成します。プロバイダは、http要求を行い、次にルートを登録するサービスを作成します。実行ブロックにサービスを注入し、ルート登録を開始します。 、あなたが角度アプリの外に要求を行う必要がありますAJAXでこれを行う代わりに、 `NG-app`を使用してのアヤックス成功内の手動ブートストラップアプリからのデータを渡すために

var publicApp = angular.module('publicApp', ['ui.router']) 

publicApp.provider('routes', function($stateProvider, $urlRouterProvider, $urlMatcherFactoryProvider){ 
    function registerRoutes(listOfUrls){ 
     // register routes with $stateProvider 
     // angular.forEach(listOfUrls, function(url){ 
     //  $stateProvider.state... 
     // }); 
    } 

    this.$get = function($http){ 
     return { 
      initialize: function(){ 
       return $http.get('/page-urls').then(function(response){ 
        registerRoutes(response.data); 
       }); 
      } 
     }; 
    }; 
}); 

publicApp.run(function(routes){ 
    routes.initialize(); 
}); 
+0

このソリューションを試しましたが、エラーが発生しました。 "Uncaught TypeError:未定義のプロパティ 'initialize'を読み取れません。 – kumuda

+0

コードスニペットを投稿できますか? –

+0

ここに私の質問へのリンクがあります:http://stackoverflow.com/questions/39464624/call-to-a-function-within-get-of-provider-modules-causes-typeerror – kumuda

関連する問題