¿Cuál es la mejor forma de pasar el mensaje en el escenario siguiente?Pasar el objeto entre las vistas (mensaje flash)
En el caso de éxito de $scope.p.$save
, el resultado contiene un mensaje (res.message
), que me gusta mostrar en la vista siguiente ($location.path("/test/"+res.reply.Id)
). Sin AngularJS, puedo pasarlo en la url o guardarlo en cookies de sesión. Pero, supongo que podría haber una mejor manera en AngularJS ya que no hay redirección del navegador y el estado debería estar disponible. ¿Cuál es la mejor manera de lograr esto?
configurándolo en rootScope lo muestra mientras uso el botón Atrás del navegador, y el alcance del mensaje solo debe aparecer en la primera navegación a la nueva vista.
function NewCtrl(Phone, $location, $rootScope, $scope) {
$scope.p = new Phone();
$scope.save = function() {
$scope.p.$save(
{},
function (res) {
$rootScope.message = res.message **//<-- this will cause message still set when using browser back button, etc**
$location.path("/test/"+res.reply.Id); **//<-- Req: needs to pass the message to next view**
}, function (res) {
//TODO
}
);
};
}
....
PhoneApp.factory('Phone', function ($resource) {
return $resource('/api/test/:_id')
});
Gracias mucho por su ayuda y esfuerzo. – bsr
Acabo de editarlo, pensé en una implementación ** mucho ** mejor y más simple, que admite múltiples flashes, usando una matriz. –
También puede considerar '$ routeChangeStart' ya que el éxito es a veces (según su configuración) llamado demasiado tarde en el proceso (la nueva página puede estar cargada y el alcance de la alerta resuelto). –