2016-04-24 21 views
0

は現在、私のコードは次のようになります。角度ui-router解決の複数の約束の結果を待つ方法がありますか?

resolve: { 
      adminTestLevel: ['testService', (tes: ITestService) => { 
       return tes.getAdminTestLevel(); 
      }], 
      adminTestStatus: ['testService', (tes: ITestService) => { 
       return tes.getAdminTestStatus(); 
      }], 
      adminTestType: ['testService', (tes: ITestService) => { 
       return tes.getAdminTestType(); 
      }], 
      adminTestGradeType: ['testService', (tes: ITestService) => { 
       return tes.getAdminTestGradeType() 
      }], 
      exams: ['testService', (tes: ITestService) => { 
       return tes.getExams(); 
      }], 
      examTypes: ['testService', (tes: ITestService) => { 
       return tes.getExamTypes(); 
      }], 
      testOrderBy: ['testService', (tes: ITestService) => { 
       return tes.getTestOrderBy(); 
      }], 
      topics: ['testService', (tes: ITestService) => { 
       return tes.getTestsTopics(); 
      }], 
     }, 

は、私がITestServiceのように多くの注射を持っている必要はありませんように私はこれを簡素化することができ方法はありますか?また、私はすべての異なる解決策を持つ必要はなく、可能であればこれらを1つにまとめたいと思います。

答えて

1

あなたは($q)のドキュメントから$q.all(promises)

を使用するように試みることができる:

$q.all(promises);
は、入力の約束がすべて解決されたときに解決された単一の約束に複数の約束を結合します。

約束事の中で複数の約束事を組み合わせて解決を待つことができます。あなたのコードのようになります。値の配列/ハッシュで解決される単一の約束、それぞれの値を返します

も同じドキュメントから

、お使いのコントローラで、その後

resolve: { 
    required_data: function($q, testService) { 
     return $q.all([ 
      testService.getAdminTestLevel(), 
      testService.getAdminTestStatus(), 
      testService.getAdminTestType() 

      // and so on for all other promises 
     ]) 
    } 
} 

$q.all(promises)
約束事の配列/ハッシュ内の同じインデックス/キーの約束に対応

required_dataから結果にアクセスできますontroller。
たとえばadminTestLevelは、required_data[0] ...で利用できます。これは、ルータでプロミスアレイを作成したのと同じ順序で行います。

1

あなたは

$q.allをあなたのコントローラ内で使用することができ、結果の配列を与える解決します$ q.all

resolve: { 
    myDate: function($q, tes) {  
     return $q.all([tes.getAdminTestLevel(), ... , tes.getTestsTopics()]); 
    } 
} 

myDataのみ、アレイ内のすべての約束の後に解決されます使用することができ、あなたは索引でそれらにアクセスすることができますので、あまり便利ではない単純な注入です。