Angular ui -router Браузер страниц Обновить Отображение нулевых значений? Как можно сохранить данные?

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

В момент времени.

Когда браузер обновляет страницу, значение становится нулевым, и в ответ возникает ошибка 500.

Он просматривает путь конфигурации состояния и переходит к контроллеру, там есть нулевые значения. Как можно сохранить данные в ui-state provider.

Url Look like :
http://localhost/Myproject/#/home/Retailer/retailerId=1?retailerCode=3

When I click the button i have carry over the value
 $state.go('Home.retailer', { 'retailerId': $scope.param1, 'retailercode': $scope.param1});



While refersh the page, the values getting null in module.

.state('home.retailer', {

        url: '/contract/:retailerId:9?retailercode:1',
        params:{
                   'retailerId': '9', 'retailercode': '1' 
       },
        views: {
            '@': {
                templateUrl: baseUrl + 'retailr/retailerList',
                controller: 'home',
            }
        },
        data: {
           Name: '',
            Img: 'Images/1.png'
        }

    })

Примечание. При нажатии кнопки я получаю значение, поэтому служба возвращает данные.

Проблема: при обновлении страницы она переходит в модуль и проверяет home.retailer и обратно в сервис. как сохранить данные при обновлении браузера.

что именно это может сделать: params: { 'retailerId': '9', 'retailercode': '1' },

Because of null, response Here I am passing the retailer id and Retailer code in service inside the controller. 
 `RetailerService.pageLoad($scope.retailerId,$scope.retailercode)` when Click the button ,
RetailerService.pageLoad($scope.retailerId :9 ,$scope.retailercode :1) , 



Page Refresh RetailerService.pageLoad($scope.retailerId : null,$scope.retailercode : null)` 

person Mohamed Sahir    schedule 26.05.2016    source источник
comment
Нам нужны контроллеры и служба БД. Кроме того, вы ставите H в $state.go('Home..., когда ваш штат называется дом...   -  person Walfrat    schedule 26.05.2016
comment
@Walfrat, это пример кода, проблема возникает из-за нулевых значений в двух полях: «retailerId»: «9», «retailercode»: «1». мне нужно сохранить данные при просмотре обновления страницы.   -  person Mohamed Sahir    schedule 26.05.2016
comment
И как мы должны ответить, если мы не знаем, как $scope.param1 get присваивается значение? Дайте нам полный контроллер, который идет вместе с $state.go   -  person Walfrat    schedule 26.05.2016
comment
Работает нормально. @walfrat: не путайте вопрос. У меня есть домашняя страница, есть кнопка, когда я нажимаю данные, они переходят во вложенные представления, и у меня есть код Retailerid 9 и розничного продавца: 1. Проблема: сейчас я нахожусь на странице продавца, события нет, я нахожусь вне DoM. Происходит обновление страницы браузера, не получая значения в коде розничного продавца и идентификаторе розничного продавца. Он не попадает в контроллер напрямую, он переходит в приложение и выполняет поиск маршрута, соответствует маршруту, сервис Ожидает значение, но не получает значение   -  person Mohamed Sahir    schedule 26.05.2016
comment
но значение должно быть в правах URI? Таким образом, вы не должны получать нулевые значения. Вы уверены, что этот URL-адрес написан правильно? '/contract/:retailerId:9?retailercode:1'   -  person Walfrat    schedule 26.05.2016
comment
проблема в том, что я получаю null , когда я установил параметры и также установил его в URL-адресе.   -  person Mohamed Sahir    schedule 26.05.2016
comment
я думаю, что ваша конфигурация URL-адреса неверна, вы можете попробовать это: '/contract/:retailerId/:retailercode. Это может быть не то, что вы хотите (значение по умолчанию), но сначала попробуйте, чтобы проверить, работает ли оно.   -  person Walfrat    schedule 26.05.2016
comment
предположим, что у вас есть URL-адрес, в URL-адресе происходит обновление страницы, вы должны получить значение в контроллере, в контроллере, используя это значение, переданное на заводе или в службе, чтобы получить данные, как вы это делаете   -  person Mohamed Sahir    schedule 26.05.2016
comment
есть ли способ получить значение переноса и передать его в контроллер.   -  person Mohamed Sahir    schedule 26.05.2016
comment
@walfrat, если я жестко запрограммирую значение в корневой области в контроллере, верну результаты. Теперь я вручную задал значение в области действия контроллера, что означает возврат результата. Вы уверены, что я могу получить значение из URL-адреса состояния в область контроллера или корневую область? Это моя путаница, или у меня есть хранилище в хранилищах браузера?   -  person Mohamed Sahir    schedule 26.05.2016
comment
Если значение находится в URL-адресе и было определено в конфигурации состояния, вы можете получить его, внедрив $stateParams в свой контроллер.   -  person Walfrat    schedule 27.05.2016
comment
@walfrat, спасибо, это то, что мне нужно, var RetailerController = function ($scope, $rootScope, $http, $stateParams) { $scope.retailerId = $stateParams.retailerId; } Где я установил URL? В параметрах: params:{ 'retailerId': '9', 'retailercode': '1' } или в URL: url: '/contract/:retailerId:9?retailercode:1',   -  person Mohamed Sahir    schedule 27.05.2016
comment
я действительно не знаю, что вы пытаетесь сделать там. Можете ли вы попробовать следующее: удалите параметры атрибута в sate и установите URL-адрес следующим образом: '/contract/:retailerId/:retailercode. Сначала скажите мне, работает ли это, а затем мы постараемся улучшить его, чтобы оно больше соответствовало тому, что вам нужно.   -  person Walfrat    schedule 27.05.2016


Ответы (1)


Чтобы сохранить данные при обновлении, вам необходимо сохранить их в хранилище браузера. Вот хороший пример фабрики, использующей localStorage.

app.factory("storageFactory", function($window) {
  return {
    setData: function(val) {
      $window.localStorage && $window.localStorage.setItem('my-storage', val);
      return this;
    },
    getData: function() {
      return $window.localStorage && $window.localStorage.getItem('my-storage');
    }
  };
});

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

Изменить: как упоминалось ниже, вместо localStorage также можно использовать sessionStorage. То, что вы выбираете, должно зависеть от ваших потребностей.

person user2263572    schedule 26.05.2016
comment
Один комментарий по этому поводу заключается в том, чтобы не использовать локальное хранилище, а вместо этого использовать хранилище сеансов. Local будет сохраняться между сеансами и браузерами, что может быть нежелательно. Сессия будет уничтожена при закрытии браузера. Другой вариант, если вы не хотите использовать сеанс, — настроить заводскую службу для хранения данных в области видимости. - person rlcrews; 26.05.2016
comment
Есть ли другой способ без сохранения в сеансе, файлах cookie и локальном хранилище. могу ли я перейти в параметры и получить значение в сервисе - person Mohamed Sahir; 26.05.2016
comment
Если вы хотите каким-либо образом сохранить данные, которые не являются частью URI, вам потребуется локальное хранилище или сеанс, обновление = потеря всего контекста javascript. - person Walfrat; 26.05.2016
comment
Также можно использовать очень верное sessionStorage. То, что выбирает разработчик, должно соответствовать его варианту использования. - person user2263572; 26.05.2016
comment
Поскольку он не статический, его динамический может быть сейчас, когда я нахожусь в коде продавца 10, в БД много записей. В пользовательском интерфейсе происходит обновление страницы, если я сохраняю каждый идентификатор в локальном хранилище, это не очень хорошо. - person Mohamed Sahir; 26.05.2016
comment
Вы можете структурировать свой код так, чтобы он сохранялся в хранилище браузера только тогда, когда это имеет смысл. Вам не нужно делать это каждый раз, когда переменная изменяется. Просто вызывайте метод setData только при необходимости. - person user2263572; 26.05.2016