我正在使用Angular和Angular-UI ui-router。我有一些定义的状态:
app.config(function ($stateProvider, $urlRouterProvider) {
$stateProvider
.state('tabs', {
url: "/tab",
abstract: true,
templateUrl: "views/tabs.html"
})
.state('tabs.home', {
url: "/home",
views: {
'home-tab': {
templateUrl: "views/home.html"
}
}
});
请注意,我使用的是抽象状态。是否有一个方便的功能,通过名称获取给定状态的URL?例如,我想要类似的东西:
$state.get('tabs.home').absoluteUrl
应返回类似#/tab/home
的值。
答案 0 :(得分:8)
您要搜索的是内置$state
方法href()
。你可以看到example here。文档:
如何获取当前状态href?
<强>
$state.href($state.current.name);
强>
让我们拥有此扩展映射(请参阅plunker中的详细定义):
$stateProvider.
state('tabs', {
url: '/tab',
abstract: true,...
})
.state('tabs.home', {
url: '/home',...
})
.state('tabs.home.detail', {
url: '/{id:[0-9]{1,4}}',...
})
.state('tabs.home.detail.edit', {
url: '^/edit/{id:[0-9]{1,4}}',...
});
状态调用的示例:
ui-sref
<ul>
<li><a ui-sref="tabs.home">Tabs/Home</a></li>
<li><a ui-sref="tabs.home.detail({id:4})">Tabs/Home id 4</a></li>
<li><a ui-sref="tabs.home.detail({id:5})">Tabs/Home id 5</a></li>
<li><a ui-sref="tabs.home.detail.edit({id:4})">Tabs/Home id 4 - edit</a></li>
<li><a ui-sref="tabs.home.detail.edit({id:5})">Tabs/Home id 5 - edit</a></li>
</ul>
href
<ul>
<li><a href="#/tab/home">Tabs/Home</a></li>
<li><a href="#/tab/home/4">Tabs/Home id 4</a></li>
<li><a href="#/tab/home/5">Tabs/Home id 5</a></li>
<li><a href="#/edit/4">Tabs/Home id 4 - edit</a></li>
<li><a href="#/edit/5">Tabs/Home id 5 - edit</a></li>
</ul>
在每个人中我们都可以打电话
var href =
$state.href($state.current.name);
将导致
#/tab/home
#/tab/home/4
#/tab/home/5
#/edit/5 -- this state resets the url form the root
#/edit/5 -- see the (^) at the start of the url definition