我有一个运行UI-router(0.2.13)的Angular(1.2.1)应用程序,并且具有以下状态结构:
$stateProvider.state('home', {
template: "<div home></div>",
url: '/'
}).state('home.geo', {
url:'/geo/{geo}'
}
从父级到子级或在具有不同{geo}
参数值的子级之间过渡按预期进行。从子级到父级的过渡-即模板和$ state.current的内容按预期更改-但URL在浏览器中不会更新。
举个简单的例子:我在/geo/california
,然后用单击一个按钮ui-sref='home'
。我确认href='#/'
按钮上已放置了正确的字符,单击它会使$ state转换回原始状态,但/geo/california
仍保留在我的地址栏中。
我在这里想念什么?
更新为@UlukBiy的评论:不,home
其模板中没有ui视图。ui-view位于其父级的模板中:总体结构为:
<body>
<div app-nav></div>
<div ui-view></div>
</body>
因此,home指令将插入到ui-view中,但是它不包含自己的ui-view。那是我的问题吗?我是UI路由器的新手,并假设在发布此书时,对于状态与指令的作用存在一些低级的误解。如果是这样,请帮助我进行更正。
这种情况下应该工作。有一个有效的示例 (单击右上角的蓝色按钮在单独的窗口中运行示例,显示地址栏)
我更新了您的状态def:
$stateProvider
.state('home', {
url: "/",
template: 'Home view <hr /> Geo view: <div ui-view></div>',
})
.state('home.geo', {
url:'^/geo/{geo}',
templateUrl: 'tpl.html',
})
所有这些链接都可以正常工作:
<a href="#/home">
<a href="#/geo/california">
<a href="#/geo/czechia">
<a ui-sref="home">
<a ui-sref="home.geo({geo:'california'})">
<a ui-sref="home.geo({geo:'czech'})">
因此,这里最重要的更改是对于子状态,我们应该使用以下网址:
url:'^/geo/{geo}',
而不是url:'/geo/{geo}'
。检查文档:
如果您想进行绝对的url匹配,则需要在url字符串前面加上特殊符号
'^'
。
在这里检查工作示例
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句