ui-router和angularjs中的并行状态 - 防止重新加载

ui-router和angularjs中的并行状态 - 防止重新加载

问题描述:

我在ui-router中有一个'并行状态'设置,允许url和状态确定DOM的两个不同部分(左侧和右侧)。右边总是'酒吧',左边是巴兹和蝙蝠。有一个抽象的父状态,它决定了通过project_id显示哪个项目。更改父状态/ project_id将更改baz,bat和bar的内容。代码在下面,并且工作。ui-router和angularjs中的并行状态 - 防止重新加载

问题是,当状态从project.baz - > project.bat转换时,'bar'视图重新初始化(例如指令重新运行链接函数),这会导致一些丑陋。

问题:当状态从project.baz - > project.bat改变时,是否有办法阻止'bar'视图被重新初始化?当然,它应该在它的父状态(即project_id)改变时重新初始化。

感谢

$stateProvider 
.state('project', { 
     abstract: true, 
     url: "/qux/:project_id", 
     views: { 
      "left": { 
       templateUrl: 'foo.html', 
       controller: 'FooController' 
      }, 
      "right": { 
       templateUrl: 'bar.html', 
       controller: 'BarController' 
      } 
     } 
    }) 

    .state('project.baz', { 
     url: "/baz", 
     views: { 
      "": { 
       templateUrl: 'baz.html', 
       controller: 'BazController' 
      }, 
      "right": { 
       templateUrl: 'bar.html', 
       controller: 'BarController', 

      } 
     } 
    }) 

    .state('project.bat', { 
     url: '/bat', 
     views: { 
      "": { 
       templateUrl: 'bat.html', 
       controller: 'BatController' 
      }, 
      "right": { 
       templateUrl: 'bar.html', 
       controller: 'BarController' 
      } 
     } 
    }) 
+0

看看ui-router-extras提供的粘性状态(并行状态)和深度状态重定向功能http://christopherthielen.github.io/ui-router-extras/#/home – Martin 2014-08-28 19:57:51

+0

谢谢。看起来像粘性状态是我需要的。当我下一次检修代码时,我会给出一个结论。现在,为了稳定的缘故,我不会。你知道目前ui-router-extras有多稳定吗? – tom 2014-08-28 22:29:44

我无法重现您所描述的问题:http://plnkr.co/edit/krpCu6HokH365ukisPHu?p=preview

这可能是不必要的对孩子的看法指定的"right"看法,如果它是不超过一个不同父母国家的意见:

$stateProvider 
    .state('project', { 
    abstract: true, 
    url: "/qux/:project_id", 
    views: { 
     "left": { 
     templateUrl: 'foo.html', 
     controller: 'FooController' 
     }, 
     "right": { 
     templateUrl: 'bar.html', 
     controller: 'BarController' 
     } 
    } 
    }) 
    .state('project.baz', { 
    url: "/baz", 
    templateUrl: 'baz.html', 
    controller: 'BazController' 
    }) 
    .state('project.bat', { 
    url: '/bat', 
    templateUrl: 'bat.html', 
    controller: 'BatController' 
    }); 

但是,即使代码逐字从您的问题复制,我是una重现问题。

+0

感谢potatosalad。我会用可重现的问题制作一个plinkr,然后在这里更新。 – tom 2014-08-28 22:25:13