Actuellement, notre projet utilise par défaut $routeProvider
, et j'utilise ce "hack", pour changer url
sans recharger la page:
services.service('$locationEx', ['$location', '$route', '$rootScope', function($location, $route, $rootScope) {
$location.skipReload = function () {
var lastRoute = $route.current;
var un = $rootScope.$on('$locationChangeSuccess', function () {
$route.current = lastRoute;
un();
});
return $location;
};
return $location;
}]);
et en controller
$locationEx.skipReload().path("/category/" + $scope.model.id).replace();
Je pense remplacer routeProvider
par ui-router
des itinéraires de nidification, mais je ne trouve pas cela dans ui-router
.
Est-ce possible - faire la même chose avec angular-ui-router
?
Pourquoi ai-je besoin de ça? Permettez-moi de vous expliquer avec un exemple: la
route pour créer une nouvelle catégorie est /category/new
après clicking
sur SAVE je montre success-alert
et je veux changer la route /category/new
en /caterogy/23
(23 - est l'id du nouvel élément stocké dans la base de données)
angularjs
angular-ui-router
vuliade
la source
la source
$urlRouterProvider.otherwise
semble fonctionner sur une URL, pas sur un état. Hmmm, je pourrais peut-être vivre avec 2 URL, ou trouver un autre moyen d'indiquer qu'il s'agit d'une URL invalide.Réponses:
Vous pouvez simplement utiliser à la
$state.transitionTo
place de$state.go
.$state.go
appelle en$state.transitionTo
interne mais définit automatiquement les options sur{ location: true, inherit: true, relative: $state.$current, notify: true }
. Vous pouvez appeler$state.transitionTo
et réglernotify: false
. Par exemple:peut être remplacé par
Edit: Comme suggéré par fracz, cela peut simplement être:
la source
$state.transitionTo('.detail', {id: newId}, { location: true, inherit: true, relative: $state.$current, notify: false })
donc, fondamentalement, définissez notifier sur false et l'emplacement sur true$state.go('.detail', {id: newId}, {notify: false})
.Ok, résolu :) Angular UI Router a cette nouvelle méthode, $ urlRouterProvider.deferIntercept () https://github.com/angular-ui/ui-router/issues/64
en gros, cela se résume à ceci:
Je pense que cette méthode n'est actuellement inclus dans le maître version du routeur angulaire ui, celui avec des paramètres facultatifs (qui sont bien aussi, d' ailleurs). Il doit être cloné et construit à partir de la source avec
Les documents sont également accessibles depuis la source, via
(ils sont intégrés dans le répertoire / site) // plus d'informations dans README.MD
Il semble y avoir une autre façon de faire cela, par des paramètres dynamiques (que je n'ai pas utilisés). De nombreux crédits à nateabele.
En guise de remarque, voici les paramètres facultatifs dans $ stateProvider de Angular UI Router, que j'ai utilisés en combinaison avec ce qui précède:
cela permet de résoudre un état, même si l'un des paramètres est manquant. Le référencement est un objectif, la lisibilité en est un autre.
Dans l'exemple ci-dessus, je voulais que doorSingle soit un paramètre obligatoire. On ne sait pas comment les définir. Cela fonctionne bien avec plusieurs paramètres optionnels, donc pas vraiment de problème. La discussion est ici https://github.com/angular-ui/ui-router/pull/1032#issuecomment-49196090
la source
Error: Both params and url specicified in state 'state'
. Il est dit dans la documentation qu'il s'agit également d'une utilisation invalide. Un peu décevant.Après avoir passé beaucoup de temps avec ce problème, voici ce que j'ai travaillé
la source
ui-router
que, comment pouvez - vous dire que, d' autres solutions travaillaient pour$routerProvider
,$routeProvider
et$stateProvider
sont totalement différents dans l' architecture ..$onInit()
mon composant soit appelé à chaque fois que j'utilise le$state.go
. Cela ne me semble pas 100% ok.Appel
rechargera toujours le contrôleur.
Pour éviter cela, vous devez déclarer le paramètre comme dynamique:
Alors tu n'as même pas besoin d'
notify
appelersuffit. Neato!
De la documentation :
la source
Cette configuration a résolu les problèmes suivants pour moi:
.../
à.../123
Configuration de l'état
Appel des états (depuis n'importe quel autre contrôleur)
Contrôleur de formation
la source
Si vous avez seulement besoin de modifier l'URL mais que vous évitez le changement d'état:
Changez d'emplacement avec (ajoutez .replace si vous souhaitez remplacer dans l'historique):
Empêcher la redirection vers votre état:
la source
je l'ai fait mais il y a longtemps dans la version: v0.2.10 de UI-router comme quelque chose comme ceci:
la source
Essayez quelque chose comme ça
la source
Je ne pense pas que vous ayez besoin du tout d'un ui-router pour cela. La documentation disponible pour le service $ location indique dans le premier paragraphe, "... les modifications apportées à $ location sont reflétées dans la barre d'adresse du navigateur." Il continue plus tard en disant: "Qu'est-ce que cela ne fait pas? Cela ne provoque pas un rechargement complet de la page lorsque l'URL du navigateur est modifiée."
Donc, dans cet esprit, pourquoi ne pas simplement changer le $ location.path (car la méthode est à la fois un getter et un setter) avec quelque chose comme ce qui suit:
La documentation note que le chemin doit toujours commencer par une barre oblique, mais cela l'ajoutera s'il est manquant.
la source
ui-router
et utilise$location.path(URL_PATH)
, la page est automatiquement restituée?!