2017-04-05 25 views
0

経由のURLのparamを解決し、私はこのAngularjs:サーバーの応答

app.ts

function getYear(): number { 
    const date = new Date(); 
    let year = date.getFullYear(); 
} 


$urlRouterProvider.when("/", `/year/${getYear()}`); 

$stateProvider.state("/", { 
     url: "/" 
    }).state("app", { 
     url: "/year/{year:int}", 
     controller: "AppController as ctrl", 
     templateUrl: "templates/application.html", 
     requireADLogin: true, 
     params: { 
      year: getYear() 
     } 
    }) 

今サーバーから「今年のparamを取得するためにrequieredだ饅頭のようなコードを働いてきました。

私はこのような何かをしようとしました:

$stateProvider.state("/", { 
     url: "/" 
    }).state("app", { 
     url: "/year/{year:int}", 
     controller: "AppController as ctrl", 
     templateUrl: "templates/application.html", 
     requireADLogin: true,   
     resolve: { 
      year: ["YearService", (yearService: services.YearService) => { 
        return yearService.GetYear(); 
        }] 
     } 
    }) 

しかし、これは単なるウォッチャー例外のanormous量でページをハングアップします。

また、私は考えていた:

$stateProvider.state("/", { 
     url: "/" 
    }).state("app", { 
     url: "/year/{year:int}", 
     controller: "AppController as ctrl", 
     templateUrl: "templates/application.html", 
     requireADLogin: true, 
     params: { 
      year: function(){ 
       //Here is the question 
       //How to resolve services.YearService? 
      } 
     } 
    }) 
+0

で、次に利用できるようになりますあなたがwindow["initialYear"]を初期化する必要があり、コールバック関数内のparams:{ 年:{タイプ:「int型、生:真} } –

+0

ます。https: //ui-router.github.io/ng1/docs/latest/interfaces/params.paramdeclaration.html –

答えて

0

私はこのようなsyncronousサーバー呼び出しでgetYear()機能を置き換える終わる:

function getYear(): number { 
     if (!window["initialYear"]) { 
      var year = $.ajax({ 
       type: "GET", 
       url: "api/year/initial", 
       async: false 
      }).responseText; 

      window["initialYear"] = parseInt(year); 
     } 

     return window["initialYear"]; 
    } 

それはsyncronousだとに角処理を停止しますので、それが最善の方法ではありません要求を行う。

これは、API呼び出しで<script/>タグ上記index.htmlファイルに配置されたコールバック関数でJSONPを返す必要があり、あなたのAPIメソッドへ<script/>参照してindex.htmlファイルを使用することをお勧めします。そして...このようなあなたのparamsを試してみてください、あなたのapp.ts