2017-05-08 54 views
1

我們必須支持在獲取模板並將其附加到dom後需要運行同步代碼的傳統模塊。獲取模板並附加到DOM後的UI-Router鉤子

我們正在從自定義路由器遷移到UI-Router。路由已成功解析,並且模板正確提取。不過,我似乎無法找到一個轉換,允許我加載模板後進行掛接。

詳情:

  • UI-路由器:1.0.0-RC.1
  • 角:1.5.8

我已經試過了onSuccesshook歸國鏈有一個解決promisethen回調。但這仍然在轉換生命週期內,並且模板尚未附加/插入到dom中。在狀態定義中使用解析塊也可以這樣說。

onSuccess之後執行超時。這顯然有效,但不是解決方案。

我們確實有redux-ui-router,所以我可以在調用onSuccess時調度thunk,但這需要對舊模塊進行額外的重構。

任何信息或想法,將不勝感激。

謝謝!

回答

0

你在正確的軌道上onSuccess。響應於成功的狀態機轉換而調用onSuccess掛鉤UI-Router itself synchronizes the views using an onSuccess hook使用0的默認優先級。當視圖同步時,模板將被編譯並添加到DOM中。

通過註冊一個優先級稍低的onSuccess鉤子,鉤子將在視圖同步鉤子完成後被調用。

app.run(function($transitions) { 
    $transitions.onSuccess({}, yourhook, { priority: -1 }) 
}); 

注意,AngularJS模板渲染是因爲消化循環的固有異步


這裏是一個演示這點plunker:

  • 鉤前後視圖是同步後有debugger

  • 模板變量插值才能完成摘要週期已完成

http://plnkr.co/edit/OpKexobSQ6WTrP87k4Tb?p=preview

0

Chris T答案是一個更好的解決方案來獲取單個模板,但我們不得不提取多個。我們最終利用瞭解析塊。

resolve: { 
      templates: ['$q', '$templateRequest', function ($q, $templateRequest) { 
        return $q.all([ 
         $templateRequest('../template1.html'), 
         $templateRequest('../template.html') 
        ]); 
       }] 
     }, 

然後在承諾解析中成功初始化。