sref angularjs angular-ui-router

angularjs - sref - ¿Cómo puedo actualizar $ stateParams sin volver a cargar el ui-view? enrutador ui angular



ui sref ui router angularjs (3)

Obtenga el contexto, angular, ui-router, nada especial, una vista de raíz creada con 3 ui-views con nombre. así que en index.html tenemos

<body> <div ui-view=''left''> <div ui-view=''center''> <div ui-view=''right''> </body>

mi ruta parece

$stateProvider .state(''main'', { url: ''/'', views: { ''left'': {templateUrl: ''foo.html''}, ''center'': {templateUrl: ''bar.html''}, ''right'': {templateUrl: ''xyz.html''} } }) .state(''main.b'', { url: ''/b'', params: { foo: {value: ''bar''} } views: { ''right@'': {templateUrl: ''123.html''} } // I wish to update $stateParams in ''left@'' view }) .state(''main.c'', { url: ''/c'', params: ... views: { ''left@'': ..., ''center@'': ..., ''right@'': .. } });

¿Hay alguna forma de pasar al estado b para actualizar $ stateParams en la vista ''centro'' e ''izquierda''? Puedo obtenerlo usando un servicio pero necesito agregar un $watch a la variable que necesito y me parece un poco intrincado.

Al entrar en el estado c, puedo obtener lo que quiero, pero la vista se vuelve a cargar, y deseo evitar este comportamiento porque tengo un lienzo en la vista "izquierda".


Citando a @christopherthielen de https://github.com/angular-ui/ui-router/issues/1758#issuecomment-205060258 :

Usar Notify: false casi nunca es una buena idea, y ahora está en desuso. Utilice reloadOnSearch si es necesario.

También puede probar los parámetros dinámicos en la versión 1.0 (actualmente 1.0.0-alpha.3). En su estado, configure un parámetro como dinámico e implemente la devolución de llamada uiOnParamsChanged:

.state(''foo'', { url: ''/:fooId'', params: { fooId: { dynamic: true } }, controller: function() { this.uiOnParamsChanged = function(changedParams, $transition$) { // do something with the changed params // you can inspect $transition$ to see the what triggered the dynamic params change. } } });

Para ver una demostración, eche un vistazo a este plunker: http://plnkr.co/edit/T2scUAq0ljnZhPqkIshB?p=preview


Creo que usar "parámetros dinámicos" es ahora una mejor solución:

Cuando dinámico es verdadero, los cambios en el valor del parámetro no harán que se ingrese o salga el estado. Los resuelve no se volverán a recuperar, ni las vistas se volverán a cargar.

$stateProvider.state(''search'', { url: ''/search?city&startDate&endDate'', templateUrl: ''some/url/template.html'', params: { city: { value: ''Boston'', dynamic: true } } }

y entonces:

$state.go(''.'', {city: ''London''});

https://ui-router.github.io/ng1/docs/latest/interfaces/params.paramdeclaration.html#dynamic https://github.com/angular-ui/ui-router/issues/2709


Puede usar lo siguiente para ir a una ruta específica sin volver a cargar las vistas:

$state.go(''.'', {parm1: 1}, {notify: false});

El último objeto literal representa las opciones que puede pasar para go . Si configura notify en false , esto realmente evitará que los controladores se reinicialicen. El . al principio es el nombre de estado absoluto o la ruta de estado relativa a la que desea ir.

Lo importante es la notify sin embargo.