2016-05-15 91 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