63

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/)?

3 Answers 3

129

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

Sign up to request clarification or add additional context in comments.

2 Comments

Can you reverse this? Get the state from an href?
I would suggest to have a look at ui.router.util angular-ui.github.io/ui-router/site/#/api/…
101

What about :

$state.href($state.current.name, $state.params, {absolute: true})

1 Comment

the most useful and complete answer!
2

For getting the absolute URL without parameters, I'm finding I need to pass inherit: false, eg:

$state.href('home', {}, {absolute: true, inherit: false})

Without inherit: false I was getting any/all params that may be present.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.