Actualmente nuestro proyecto está usando el predeterminado $routeProvider
, y estoy usando este "hack", para cambiar url
sin volver a cargar la página:
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;
}]);
y en controller
$locationEx.skipReload().path("/category/" + $scope.model.id).replace();
Estoy pensando en reemplazar routeProvider
con ui-router
para las rutas de anidación, pero no puedo encontrar esto en ui-router
.
¿Es posible, hacer lo mismo con angular-ui-router
?
¿Por qué necesito esto? Permítanme explicarlo con un ejemplo: la
ruta para crear una nueva categoría es /category/new
después clicking
de GUARDAR que muestro success-alert
y quiero cambiar la ruta /category/new
a /caterogy/23
(23 - es la identificación del nuevo elemento almacenado en db)
angularjs
angular-ui-router
vuliad
fuente
fuente
$urlRouterProvider.otherwise
parece funcionar en una URL, no en un estado. Hmmm, tal vez podría vivir con 2 URL, o encontrar alguna otra forma de indicar que es una URL no válida.Respuestas:
Simplemente puede usar en
$state.transitionTo
lugar de$state.go
.$state.go
llama$state.transitionTo
internamente pero establece automáticamente las opciones en{ location: true, inherit: true, relative: $state.$current, notify: true }
. Puedes llamar$state.transitionTo
y configurarnotify: false
. Por ejemplo:puede ser reemplazado por
Editar: como lo sugiere fracz, simplemente puede ser:
fuente
$state.transitionTo('.detail', {id: newId}, { location: true, inherit: true, relative: $state.$current, notify: false })
básicamente, establezca la notificación a falso y la ubicación a verdadero$state.go('.detail', {id: newId}, {notify: false})
.Ok, resuelto :) El enrutador de IU angular tiene este nuevo método, $ urlRouterProvider.deferIntercept () https://github.com/angular-ui/ui-router/issues/64
básicamente se reduce a esto:
Creo que este método actualmente solo se incluye en la versión maestra del enrutador angular ui, el que tiene parámetros opcionales (que también son buenos, por cierto). Necesita ser clonado y construido desde la fuente con
Los documentos también son accesibles desde la fuente, a través de
(se integran en el directorio / sitio) // más información en README.MD
Parece que hay otra forma de hacerlo, mediante parámetros dinámicos (que no he usado). Muchos créditos a nateabele.
Como nota al margen, aquí hay parámetros opcionales en $ stateProvider del enrutador de IU angular, que utilicé en combinación con lo anterior:
lo que hace es que permite resolver un estado, incluso si falta uno de los parámetros. SEO es un propósito, legibilidad otro.
En el ejemplo anterior, quería que doorsSingle fuera un parámetro obligatorio. No está claro cómo definirlos. Sin embargo, funciona bien con múltiples parámetros opcionales, por lo que no es realmente un problema. La discusión está aquí https://github.com/angular-ui/ui-router/pull/1032#issuecomment-49196090
fuente
Error: Both params and url specicified in state 'state'
. Dice en los documentos que este es un uso no válido también. Un poco decepcionante.Después de pasar mucho tiempo con este problema, esto es lo que conseguí trabajando
fuente
ui-router
solamente, ¿cómo se puede decir que otras soluciones, estaban trabajando para$routerProvider
,$routeProvider
y$stateProvider
es totalmente diferente en la arquitectura ..$onInit()
se llama a mi componente cada vez que uso el$state.go
. No me parece 100% correcto.Vocación
aún recargará el controlador.
Para evitarlo, debe declarar el parámetro como dinámico:
Entonces ni siquiera necesitas el
notify
, solo llamandoes suficiente Neato!
De la documentación :
fuente
Esta configuración resolvió los siguientes problemas para mí:
.../
a.../123
Configuración del estado
Invocar los estados (desde cualquier otro controlador)
Controlador de entrenamiento
fuente
Si solo necesita cambiar la URL pero evitar el cambio de estado:
Cambie la ubicación con (agregue .replace si desea reemplazar en el historial):
Prevenir la redirección a su estado:
fuente
Hice esto pero hace mucho tiempo en la versión: v0.2.10 de UI-router como algo así ::
fuente
Intenta algo como esto
fuente
No creo que necesites un enrutador ui para esto. La documentación disponible para el servicio $ location dice en el primer párrafo, "... los cambios en $ location se reflejan en la barra de direcciones del navegador". Más adelante continúa diciendo: "¿Qué no hace? No causa una recarga completa de la página cuando se cambia la URL del navegador".
Entonces, con eso en mente, ¿por qué no simplemente cambiar $ location.path (ya que el método es getter y setter) con algo como lo siguiente:
La documentación señala que la ruta siempre debe comenzar con una barra diagonal, pero esto la agregará si falta.
fuente
ui-router
, y uso$location.path(URL_PATH)
, la página se vuelve a representar automáticamente.