Передача объекта между представлениями (флэш-сообщение) - программирование
Подтвердить что ты не робот

Передача объекта между представлениями (флэш-сообщение)

Каков наилучший способ передачи сообщения в приведенном ниже сценарии.

В сценарии успеха $scope.p.$save результат содержит сообщение (res.message), которое мне нравится отображать в следующем представлении ($location.path("/test/"+res.reply.Id)). Без AngularJS я могу передать его в URL-адресе или сохранить его в сессионных файлах cookie. Но, я думаю, что может быть лучший способ в AngularJS, поскольку нет перенаправления браузера, и состояние должно быть доступно. Каков наилучший способ достичь этого?

Настройка его в корневом каталоге показывает его, когда я использую кнопку "Назад назад", и область действия сообщения должна только для первой навигации к новому представлению.

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')
});
4b9b3361

Ответ 1

Вы можете использовать услугу, которая отображает флеш на $routeChangeSuccess.

Каждый раз, когда вы устанавливаете флэш-сообщение, добавляете его в очередь, а когда изменения маршрута берут первый элемент из очереди и устанавливают его в текущее сообщение.

Вот демо:

http://plnkr.co/edit/3n8m1X?p=preview

Ответ 2

Я хотел реализовать аналогичную функциональность, но на самом деле хотел больше сообщения стиля рычания.

Я обновил отличный код plinkr, который Andy предоставил выше, чтобы включить метод "pop", который использует toastr библиотеку уведомлений стиля. p >

Мое обновление также позволяет вам указать тип уведомления (информация, предупреждение, успех, ошибка) и заголовок.

Метод "pop" пропускает добавление сообщения в очередь и вместо этого выводит его на экран немедленно. Функция set/get от Andy previous plinkr остается в основном неизменной.

Вы можете найти мое обновление здесь: http://plnkr.co/edit/MY2SXG?p=preview

Ответ 3

Я не верю, что это можно сделать по умолчанию для AngularJS. Лучше всего передать сообщение (закодированное) через строку запроса.