uirouter javascript angularjs state angular-ui angular-ui-router

javascript - uirouter - ui view angular js



¿Cómo hacer que el estado primario del ui-router angular ejecute siempre el código del controlador cuando cambia el estado? (3)

Digamos que tenemos una relación padre-hijo definida en nuestro $ stateProvider de la siguiente manera:

.state(''myProfile'', { url: "/my/profile", templateUrl: ''my/profile.html'', controller: ''MyProfileController'' }).state(''myProfile.edit'', { url: "/edit", templateUrl: ''my/profile.edit.html'', controller: ''EditMyProfileController'' });

La idea aquí es que el estado principal de myProfile no es editable, pero el estado secundario de myProfile.edit es la forma real para editar el perfil. Ignoremos si así es como debería funcionar una página de perfil. Solo estoy jugando con las cosas y aprendiendo.

Cuando un usuario envía el formulario, uso el objeto $ state para volver a la página principal:

$scope.save = function() { userResource.update($scope.user, function() { SessionService.refresh(); $state.go(''myProfile''); // also tried with reload: true as well }); }

Después de que el usuario guarda los datos del perfil, y se guarda correctamente, la vista de los padres no se actualiza a menos que presione F5 y actualice el navegador.

Una cosa que he notado es que si hago que el niño sea mi myProfile.edit en uno de los padres y no en un hijo del estado de myProfile , este problema realmente desaparece y las cosas se comportan como se esperaba (aunque el diseño se ve mal como este).

Parece que el enrutador UI tal vez esté guardando en caché el resultado del padre, sin sospechar que las cosas han cambiado en el modelo y que necesita volver a ejecutar el controlador.

¿Cómo puedo mantener mi relación padre-hijo mientras sigo teniendo la página de mi myProfile principal siempre ejecutando su controlador para recargar sus datos? Básicamente, quiero que esto suceda siempre que se use $state o cuando se myProfile clic en un enlace que dirija a myProfile . ¿Cómo puedo hacer eso?

Y si no puedo hacer lo que le pido, soy consciente de que puedo configurar un grupo de estados secundarios y hacer que funcionen según lo previsto ... sin embargo, ¿cómo puedo configurar el estado secundario predeterminado para el padre? Por ejemplo, digamos que quiero que myProfile.edit sea ​​el estado secundario predeterminado de myProfile . ¿Cómo puedo hacer eso?

¡Gracias!


¿Ha intentado escuchar el evento "$ stateChangeStart" y / o usando $ state.reload ()?


Para obligar a un estado principal a recargar cuando navegue hacia él desde un estado secundario, puede utilizar las dos formas a continuación. Pure js o un atributo directivo.

<a ui-sref="myProfile" ui-sref-opts="{ reload: true }">Back to My Profile</a>

o

$state.go(''myProfile'', null, { reload: true });


Parece que hay un error en $ state.go que está dejando de lado las opciones de recarga. $ state.transitionTo sin embargo funciona para mí.

$state.transitionTo(''state'',null,{reload: true});