Подтвердить что ты не робот

AngularJS - сохранение данных между маршрутами

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

Сейчас я использую "сервис" для сохранения данных, которые работают. Однако проблема заключается в том, что "сервис" является одноэлементным, перемещаясь от формы и возвращаясь к нему, все равно будет иметь все данные из предыдущей незавершенной или оставленной формы.

Есть ли хороший способ решить такую ​​ситуацию?

Спасибо,
Тройник

4b9b3361

Ответ 1

Почему бы вам не улучшить службу, чтобы позаботиться об удалении сохраненных данных, когда:

  • Пользователь не заполняет форму и перемещается от всего процесса отправки формы
  • Пользователь отправляет форму

В принципе, вы можете улучшить свой сервис следующим образом:

myApp.factory('myService', function () {
    var formData = {};

    return {
        getData: function () {
            //You could also return specific attribute of the form data instead
            //of the entire data
            return formData;
        },
        setData: function (newFormData) {
            //You could also set specific attribute of the form data instead
            formData = newFormData
        },
        resetData: function () {
            //To be called when the data stored needs to be discarded
            formData = {};
        }
    };
});

Ваш контроллер может быть следующим:

myApp.controller('FirstStepCtrl', ['$scope', 'myService', function ($scope, myService) {
    //This is the controller of the first step in the form
    //Reset the data to discard the data of the previous form submission
    myService.resetData();

    //Remaining Logic here
}]);

myApp.controller('LastStepCtrl', ['$scope', 'myService', function ($scope, myService) {
    //This is the controller of the last step in the form

    //Submits the form
    $scope.submitForm = function () {
        //Code to submit the form

        //Reset the data before changing the route - assuming successful submission
        myService.resetData();

        //Change the route
    };

    //Remaining Logic here
}]);

Другой альтернативой является вызов функции службы resetData(), когда маршрут изменяется на то, что не входит в приложение формы. Если у вас есть что-то вроде родительского контроллера для контроллеров шага формы, то в этом контроллере вы можете следить за изменением маршрута:

$scope.$on('$routeChangeStart', function() { 
   //Use $location.path() to get the current route and check if the route is within the 
   //form application. If it is, then ignore, else call myService.resetData()

   //This way, the data in the forms is still retained as long as the user is still
   //filling up the form. The moment the user moves away from the form submission process,
   //for example, when explicitly navigating away or when submitting the form, 
   //the data is lost and no longer available the next time the form is accessed
 });

Ответ 2

Services будет сохраняться на протяжении всей жизни ваших приложений. Поэтому у вас не должно быть никаких проблем. Все, что вам нужно сделать, это создать Service и ввести его в контроллеры, которым необходимо получить к нему доступ. Например, ниже я ввел службу User для контроллеров.

Просто используйте разные контроллеры для каждого из ваших маршрутов, чтобы ваша модель внутри области не была переопределена.

Первый контроллер для первого маршрута,

app.controller("FirstPageController", function($scope,User){   
    $scope.user = User;
    $scope.user.firstName  = "Emre";
    $scope.user.secondName = "Nevayeshirazi";
});

Второй контроллер для второго маршрута,

app.controller("SecondPageController", function($scope,User){ 
    $scope.user = User;  
    $scope.user.age = 24;
});