Qual è il modo migliore per passare il messaggio nello scenario seguente.Passaggio dell'oggetto tra le viste (messaggio flash)
Nello scenario di successo di $scope.p.$save
, il risultato contiene un messaggio (res.message
), che mi piace visualizzare nella vista successiva ($location.path("/test/"+res.reply.Id)
). Senza AngularJS, potrei passarlo nell'URL o salvarlo nei cookie di sessione. Ma, credo che ci potrebbe essere un modo migliore in AngularJS in quanto non vi è alcun reindirizzamento del browser e lo stato dovrebbe essere disponibile. Qual è il modo migliore per raggiungere questo obiettivo?
Impostandolo in rootScope viene visualizzato mentre utilizzo il pulsante Indietro del browser e l'ambito del messaggio deve essere utilizzato solo per la prima navigazione nella nuova 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')
});
grazie molto per il vostro aiuto e sforzo. – bsr
L'ho appena modificato, ho pensato a un'implementazione ** molto ** migliore e più semplice, che supporta più flash, utilizzando un array. –
Si può anche considerare '$ routeChangeStart' poiché a volte il successo è (a seconda della configurazione) chiamato troppo tardi nel processo (la nuova pagina potrebbe già essere caricata e l'ambito di avviso risolto). –