Angular UI Router:如何使用不同的$ stateParam进入相同的状态?

时间:2015-11-12 13:40:01

标签: angularjs angular-ui-router state

我想知道如何使用不同的$stateParam

进入同一状态

我试图继续:

$state.go('^.currentState({param: 0})')

然而,它没有用。

6 个答案:

答案 0 :(得分:10)

params是go()方法的第二个参数

$state.go('^.currentState', {param: 0})

go(to, params, options)

  

转换到新状态的便捷方法。 $ state.go在内部调用$ state.transitionTo但自动将选项设置为{location:true,inherit:true,relative:$ state。$ current,notify:true}。这允许您轻松使用绝对路径或相对路径,并仅指定您要更新的参数(同时让未指定的参数从当前活动的祖先状态继承)。

答案 1 :(得分:4)

在我的情况下,我想重新加载相同的状态,但使用不同的参数。 (在此特定事件中null

情况如下:我们有一个不同公司的网站,每个公司都有自己的品牌页面。您可以访问其他公司'页面和那里有一个快速访问您自己的菜单条目。

公司的页面位于/company/somecompanyid下,而访问/company时将加载您自己的页面。没有添加id。或代码中的company_id: null

问题
当您查看随机公司的页面时,让我们说company/123456,然后点击指定的菜单条目访问您自己的页面,不会发生任何事情!
Ui-router相信你是在同一条路线上,只是让你在那里。

解决方案
将以下内容添加到模板中:
<a ui-sref="company" ui-sref-opts="{reload: true, inherit: false}" ... ></a>

它做了什么?
reload: true这将迫使您的州重新加载。但它会复制您当前的路线参数。这意味着您仍然可以看到其他公司的页面。

inherit: falseinherit属性设置为false会强制ui-router使用您提供的参数。在我的情况下,companyId是null并且加载了用户的个人页面。欢呼!

您可以在文档页面上找到所有ui-sref-options。 ui-sref-options

答案 2 :(得分:4)

您可能想要使用这段代码:

&#13;
&#13;
<a ui-sref=".({param: 0})"></a>
&#13;
&#13;
&#13;

无需使用控制器。

答案 3 :(得分:1)

如果您想重新加载状态,还可以使用ui-sref-opts。传入reload: true选项,将重新加载当前状态。

<a ui-sref-opts="{reload:true}" ui-sref="app.post.applicants">Applicants</a>

答案 4 :(得分:0)

最简单的解决方案是 - &gt;

您可以使用相同的控制器和相同的html页面制作2状态并逐个重定向

PROS:无需处理历史记录,所有工作都适用于流程

  .state('app.productDetails', {
         url: '/productDetails',
         cache: false,
         views: {
             'menuContent': {
                 templateUrl: 'src/products/productDetails/productDetails.html',
                 controller: 'ProductDetailsCtrl'
             }
         },
         params: {
             productID: 0,
             modelID: 0
         }
     })

    .state('app.modelDetails', {
        url: '/modelDetails',
        cache: false,
        views: {
            'menuContent': {
                templateUrl: 'src/products/productDetails/productDetails.html',
                controller: 'ProductDetailsCtrl'
            }
        },
        params: {
            productID: 0,
            modelID: 0
        }
    })

答案 5 :(得分:0)

$state.go('.', {param: someId});