Kousha Kousha - 5 months ago 281
AngularJS Question

AngularJS UI-Router : Get the absolute URL of the state with the parameters

I wanted to be able to change the address' URL without changing the state, as to prevent rerendering. From my search,

ui-router
currently does not provide this, but
$location.path
from anuglar does.

So, naturally, I wanted to use
$state.get(stateName)
to get to the state's URL, so that I don't manually type the URL.

I have two problems:


  1. $state.get(stateName)
    returns the relative path only. How can I get the absolute path?

  2. It also returns the state's definition, with the parameters undefined. How can I get the URL with the parameter in place?



For instance, if I have a state called
user.home.view
with
user.home
, I have my states defined as

'user': {
abstract: true,
url: '^/users/'
},
'user.home': {
url: ''
},
'user.home.view': {
url: ':id/'
}


So right now,
$state.get(user.home.view).url
returns
:id/
. How can I get the full URL (i.e.,
/users/5/
)?

Answer

You should use $state.href().

  1. To get the absolute URL you can then use:

    $state.href('user.home.view', {}, {absolute: true});

  2. To get the URL with the parameters in place you need to add them as the second argument