2014-06-10 28 views
4

我正在使用Angular和Angular-UI ui-router。我定义了一些状态:在Angular-UI中获取状态的“绝对”网址?

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

你为什么需要它?如果你的路线中有变量(例如'/ home /:someVar'),你会发生什么? –

+0

我只想在某些地方通过州名来引用URL,而不是在任何地方对网址进行硬编码。 – tksfz

回答

7

你在搜索的是一个内置的$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 
+0

真棒完美答案。忽略了文档中的一个。 – tksfz

+0

伟大的,如果有帮助;)享受令人敬畏的'ui路由器' –