Angular ui-router:你可以在不改变URL的情况下改变状态吗?

时间:2014-04-01 16:03:36

标签: javascript angularjs angular-ui angular-ui-router

ui-router多个嵌套视图功能非常好 - 您可以轻松地从应用的一个状态跳转到另一个

有时您可能想要更改网址,但有时不会。我觉得 state 的概念应该与路由分开/可选。

Here's a plunker that shows what I mean.这是ui-router文档中其中一个掠夺者的分支,下面有两个小的更改:

.state('route1', {
        url: "/route", // <---- URL IS SHARED WITH ROUTE2
        views: {
            "viewA": {
                template: "route1.viewA"
            },
            "viewB": {
                template: "route1.viewB"
            }
        }
    })
    .state('route2', {
        url: "/route", // <---- URL IS SHARED WITH ROUTE1
        views: {
            "viewA": {
                template: "route2.viewA"
            },
            "viewB": {
                template: "route2.viewB"
            }
        }
    })

这似乎有效 - URL保持不变。再次,这里做了多少冗余工作?这是经过批准/测试的用法吗?

如果您可以省略某州的url,那就太好了。

更新:您可以省略州的网址。 plunker

更新问题:这是经过批准/测试的用法吗?

2 个答案:

答案 0 :(得分:41)

您绝对可以拥有没有网址的州。事实上,您的州都不需要网址。这是设计的核心部分。话虽如此,我不会做你上面做的事。

如果您希望两个州拥有相同的网址,请创建一个abstract parent state,为其指定一个网址,并使两个州成为其中的子网(任何一个都没有网址)。

答案 1 :(得分:0)

要添加到其他答案,多个命名视图不使用URL。

来自文档:

  

如果你定义了一个视图对象,你的状态的templateUrl,模板和   templateProvider将被忽略。所以在你需要的情况下   这些视图的父布局,可以定义一个抽象状态   包含一个模板,以及布局状态下的子状态   包含&#39;观点&#39;对象

使用命名视图的原因是每个模板可以有多个ui-view,换句话说,在单个状态中有多个视图。这条路, 您可以使用路由更改站点的部分,即使URL没有更改,您也可以在不同的模板中重复使用数据,因为它是一个 具有它自己的控制器和视图的组件。

请参阅Angular Routing using ui-router以获得有关示例的深入解释。