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

时间:2014-08-28 17:52:44

标签: javascript angularjs angular-ui-router

我有一个'平行状态'在ui-router中设置,允许url和state确定DOM的两个不同部分(左和右)。权利永远是' bar'左边在baz和bat之间变化。有一个抽象的父状态,它通过project_id确定要显示的项目。更改父状态/ project_id会更改baz,bat和bar的内容。代码如下,并且有效。

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

问题:有没有办法阻止' bar'当状态从project.baz改变时重新初始化视图 - > project.bat?当然,当它的父状态(即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'
           }
        }
     })

1 个答案:

答案 0 :(得分:1)

我无法重现您描述的问题: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' }); 视图:

{{1}}

但是,即使从您的问题中逐字复制代码,我也无法重现该问题。