web-dev-qa-db-fra.com

AngularJS UI-Router: Obtenir l'URL absolue de l'état avec les paramètres

Je voulais pouvoir changer l'URL de l'adresse sans changer l'état, afin d'empêcher le rendu des rendus. De ma recherche, ui-router Ne fournit actuellement pas cela, mais $location.path De anuglar le fait.

Alors, naturellement, je voulais utiliser $state.get(stateName) pour accéder à l'URL de l'état, afin que je ne tape pas manuellement l'URL.

J'ai deux problèmes:

  1. $state.get(stateName) renvoie uniquement le chemin relatif. Comment puis-je obtenir le chemin absolu?
  2. Il renvoie également la définition de l'état, avec les paramètres indéfinis. Comment puis-je obtenir l'URL avec le paramètre en place?

Par exemple, si j'ai un état appelé user.home.view Avec user.home, Mes états sont définis comme suit:

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

Donc pour le moment, $state.get(user.home.view).url renvoie :id/. Comment puis-je obtenir l'URL complète (c'est-à-dire, /users/5/)?

56
Kousha

Vous devriez utiliser $state.href().

  1. Pour obtenir l'URL absolue, vous pouvez ensuite utiliser:

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

  2. Pour obtenir l'URL avec les paramètres en place, vous devez les ajouter comme deuxième argument.

112
adamK

Qu'en est-il de :

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

Pour obtenir l'URL absolue sans paramètre, je constate que je dois passer inherit: false, par exemple:

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

Sans pour autant inherit: false Je recevais tout/tous les paramètres qui pourraient être présents.

2
Isaac Gregson