2017-06-21 82 views
7

我有2個州中的CoffeeScript的方式...有沒有解決之前,任何AngularUI子解決了一個承諾路由器

stateProvider.state 'test', 
    ... 
    resolve: 
     user: (LongRunning)-> 
      LongRunning.authenticate().then -> 
       console.log("We are authenticated!") 

stateProvider.state 'test.child', 
    ... 
    resolve: 
     other: (AfterAuth)-> 
      AfterAuth.soSomethingWithAuth().then -> 
       console.log("We are done!") 

當然是因爲孩子的決心之前就此拉開序幕不起作用父母的auth方法已解決。這意味着第二個函數將不會被認證,並導致整個狀態失敗。

現在它不一定需要成爲狀態路徑的一部分,但需要在調用析取函數時完全完成。

我怎樣才能確保在調用子方法之前父函數完全解析?

壞(?)解決方案

的一個答案我已經能夠拿出是使用手動引導過程。然而,這是乏味的,因爲我需要重新連線我的所有服務。無論如何,我可以在Angular中做到這一點嗎?

回答

5

您是否使用AngularUI for Angular 2或AngularJS的路由器?我認爲這是AngularJS的事實,你使用coffeescript和AngularUI路由器。這是Angular標籤而不是AngularJS。

無論如何,在AngularUI路由器上,一個解析器可以依賴另一個解析器。類似的東西:

function firstStep($stateParams, resolveStatus) { 
    return $q.resolve(); 
} 

resolve: { 
    firstStep: firstStep, 
    secondStep: ['firstStep', function (firstStep) { 
    ... 
    }] 
} 
+0

我會補充說,你可以使用從父路由中使用所有解析參數的子路由依賴注入。在你的例子中,它有同樣的決心 - 但它不一定是那樣。 – hilnius

+0

正確,但默認情況下,在移動@hilnius之前,父解析沒有完成。所以父母中的孩子在被調用之前不能保證被解決。如果這可以確保是這種情況(添加依賴變量)適用於兒童,這應該是確定的。 – Jackie

+0

如果有30個步驟,我必須將其添加到每一步?有沒有辦法說'在firstStep之後運行任何從此繼承的步驟' – Jackie