2016-05-15 89 views
1

我正在使用UI Router Multiple Views概念。UI路由器嵌套視圖無法解析

該文件說,我可以有個人意見resolve。正如您在my plunker中看到的那樣,我對子視圖有一個解決方案。該決議返回一個承諾,在我的情況下,在父控制器中解決。我用setTimeOut模擬了我的問題。基本上,5秒後,子視圖應該加載(警報說「在兒童狀態」),但它不!

相關代碼如下,但請改爲參考Plunker。

'[email protected]': { 
    template: '<h4>This is Child State</h4>', 
    controller: childCtrl, 
    resolve: { 
     trd: function(tradeFactory) { 
      console.log('in resolve of child'); 
      return tradeFactory.ready(); 
     } 
    } 
} 
+0

哪裏是你的問題中提到的代碼? –

+0

閱讀本示例[嵌套視圖](http://stackoverflow.com/questions/34251255/creating-nested-route-app-in-angular-using-angular-ui-router-and-switching-betwe) – Maher

+0

@Maher你推薦的鏈接沒有「解決方案」的例子嗎?除了解決我的代碼工作正常 – TkNeo

回答

1

(檢查更新和工作plunker點這裏:

所有resolve必須已經解決,意見(及其控制器)渲染

而這在你的情況下是不正確的。事實上,存在競爭狀況,最終陷入僵局。

  1. 一個觀點是等待解決(設有promise
  2. 其他視圖的控制器是準備觸發的決心(使解決承諾,但...它不能被觸發,同時等待其兄弟

原始片段

views: { 

    '': { 
    ... 
    // inside of this, you expect to resolve the below promise 
    controller: parentCtrl 
    }, 


    '[email protected]': { 
     ... 
     resolve: { 
      trd: function(tradeFactory) { 
       // this is a promise waiting for resolve 
       // implemented in parent controller ... deadlock 
       return tradeFactory.ready(); 
      } 
     } 
    } 

因此,上述不起作用。我們必須全力以赴解決問題,例如這種方式:

views: { 

    '': { 
    ... 
    controller: parentCtrl, 
    // here do the resolve 
    resolve: { 
     parentReady: function(tradeFactory){ 
     setTimeout(function(){ 
      tradeFactory.ResolveReady() 
     }, 1500); 
     } 
    } 
    }, 


    '[email protected]': { 
     ... 
     resolve: { 
      trd: function(tradeFactory) { 
       console.log('in resolve of child'); 
       return tradeFactory.ready(); 
      } 
     } 
    } 

updated plunker

+0

的鏈接,非常感謝答案在我的工作流程中,uesr會花一些時間父視圖在打開子視圖之前父子視圖需要大量的數據,但是把它放在我父母的解決方案中並不是一個好主意,事實上,當用戶正在處理父視圖時,我們應該在後面加載這個子數據。爲什麼我要解決父母控制者的承諾,而不是父母的決心呢?關於如何做到這一點的任何其他建議? – TkNeo

+0

要改變UI-Router的用法,在這種情況下,你不應該玩y你做 - 在一個州有兩個意見。你應該把它分成**兩個狀態**和一個視圖*。事實上,這將簡化所有這些,將真正使用UI-Router和解析器*的功能(並且在幾個月後大部分可以很容易理解;)*。所以,介紹子狀態..一切都會解決...這是一個例子http:// stackoverflow。com/q/28800644/1679310 –

+0

我曾經想過很多關於兩個國家還是2個國家(未來會增加更多的兒童)。我一直在前後來回b/c我不喜歡在用戶變成父 - > child1 - >父 - - 孩2時更改URL的想法。所以我認爲視圖是要走的路。如果我將孩子視圖轉換爲狀態,我將如何解決父母對孩子的承諾?這個問題仍然存在不是嗎? (數據加載需要在後臺進行,而不是在子進程中進行,孩子需要等到父母解決承諾) – TkNeo