При обновлении страницы удаляется не URL-адрес $ stateParam (ui-router) - PullRequest
0 голосов
/ 08 мая 2018

Я использую UI-Router в своем приложении, и у меня есть параметр состояния, в котором не имеет смысла быть частью URL-адреса. В соответствии с документацией я создаю параметр без указания его в URL-адресе состояния, как таковой:

.state('contact', {
        url: "/:contactId/contact",
        params: {
            otherParam: null
        },
        templateUrl: 'contacts.html'
    })

Это работает как задумано, но я заметил, что если я обновлю страницу вручную, для параметра будет установлен ноль по умолчанию.

Например, если я перенаправлю в состояние как таковое:

$state.go('contact', {contactId: 42, otherParam: 11});

Все работает как положено ($stateParams.contactId равно 42, $stateParams.otherParam равно 11) Однако, как только я обновляю страницу, $stateParams.contactId по-прежнему равен 42, но $stateParams.otherParam вернулось к null. Можно ли сохранить этот не-URL-параметр при обновлении браузера?

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

URL-адреса в SPA предназначены для управления состоянием пользовательского интерфейса, т. Е. Какие компоненты отображать и с какой информацией (например, подробный компонент с идентификатором). Маршрутизатор разрешает состояние из этого. Хороший пример - думать о URL как о чем-то, что нужно отправить по электронной почте (или как-то еще) кому-то еще, и ожидать, что их маршрутизатор разрешит состояние. Итак, вкратце, я бы сказал нет на ваш вопрос.

Ваша проблема в том, что вы хотите сохранить состояние приложения, характерное для сеанса браузера, верно? Браузеры оснащены механизмами для этого, и я бы порекомендовал взглянуть на локальное хранилище или хранилище сессий , чтобы решить вашу проблему и получить необходимую информацию о методе разрешения в объявлении состояния.

0 голосов
/ 08 мая 2018

Это вроде как возможно, но вы не должны этого делать. Если это что-то, что должно сохраняться при обновлении, это означает, что по определению оно ДОЛЖНО быть в URL, так как вы ожидаете, что это будет компонент ресурса.

Если вы действительно хотите нарушить соглашение и сделать это, вам нужно сделать что-то, что сохранит данные в window.name и получит их при перезагрузке. Это определенно анти-паттерн, и любой может получить доступ к этим данным, но, как я уже сказал, это возможно.

...