Я хотел бы иметь возможность перейти в состояние и передать произвольный объект с помощью ui-router.
Я знаю, что обычно $stateParams
используется, но я считаю, что это значение вставляется в URL-адрес, и я не хочу, чтобы пользователи могли добавлять эти данные в закладки.
Я бы хотел сделать что-то подобное.
$state.transitionTo('newState', {myObj: {foo: 'bar'}});
function myCtrl($stateParams) {
console.log($stateParams.myObj); // -> {foo: 'bar'}
};
Есть ли способ сделать это без кодирования значений в URL?
Ответы:
В версии 0.2.13 вы должны иметь возможность передавать объекты в $ state.go,
а затем получить доступ к параметру в вашем контроллере.
myParam не будет отображаться в URL-адресе.
Источник:
См. Комментарий christopherthielen https://github.com/angular-ui/ui-router/issues/983 , воспроизведенный здесь для удобства:
источник
transitionTo
.[object Object]
$stateProvider.state('myState', { url: '/myState/{myParam:json}', params: {myParam: null},...
См. Примечания к выпуску 0.2.13 и комментарии к коду для этой функции.{ url: '/mystate/{id:[0-9]+}', params: { id: null, myParam: null }, ...
Есть две части этой проблемы
1) с использованием параметра, который не изменит URL-адрес (с использованием свойства params):
2) передача объекта в качестве параметра: нет прямого способа, как это сделать сейчас, поскольку каждый параметр преобразуется в строку ( РЕДАКТИРОВАТЬ : начиная с версии 0.2.13 это больше не верно - вы можете использовать объекты напрямую), но вы можете обойти это, создав строку самостоятельно
и в целевом контроллере снова десериализуйте объект
источник
На самом деле вы можете это сделать.
Это официальная документация по опциям в state.go
Там все описано и, как видите, так и нужно делать.
источник
Кстати, вы также можете использовать атрибут ui-sref в своих шаблонах для передачи объектов
источник
1)
2)
источник
Нет, URL-адрес всегда будет обновляться при передаче параметров
transitionTo
.Это происходит на state.js: 698 в ui-router .
источник