Если вы хотите передать состояние без URL, вы не должны использовать его url
при настройке вашего state
. Я нашел ответ на PR и немного поиздевался, чтобы лучше понять.
$stateProvider.state('toState', {
templateUrl:'wokka.html',
controller:'stateController',
params: {
'referer': 'some default',
'param2': 'some default',
'etc': 'some default'
}
});
Затем вы можете перейти к нему так:
$state.go('toState', { 'referer':'jimbob', 'param2':37, 'etc':'bluebell' });
Или:
var result = { referer:'jimbob', param2:37, etc:'bluebell' };
$state.go('toState', result);
А в HTML так:
<a ui-sref="toState(thingy)" class="list-group-item" ng-repeat="thingy in thingies">{{ thingy.referer }}</a>
Этот вариант использования полностью раскрыт в документации, но я думаю, что это мощное средство перехода между состояниями без использования URL-адресов.
params
массив.{referer: true, param2: true, etc: true}
Решение Натана Мэтьюза не сработало для меня, но оно полностью правильное, но нет смысла искать обходной путь:
Ключевой момент: Тип определенных параметров и toParamas $ state.go должен быть одним и тем же массивом или объектом с обеих сторон перехода между состояниями.
Например, когда вы определяете params в состоянии следующим образом, вы имеете в виду, что params является массивом из-за использования "[]":
Также вы должны передать toParams как массив, например:
И вы можете получить к ним доступ через $ stateParams в виде такого массива:
Лучшее решение - использовать объект вместо массива с обеих сторон :
Я заменил [] на {} в определении параметров. Для передачи toParams в $ state.go также следует использовать объект вместо массива:
тогда вы можете легко получить к ним доступ через $ stateParams:
источник
params: {'index', 'anotherKey'},
с вparams: {'index' : 'dummy', 'anotherKey' : 'dummy'},
противном случае это не является допустимым объектом JavascriptВсе, что мне нужно было сделать, это добавить параметр в определение состояния URL-адреса, например
Doh!
источник
/toState/:referer
синтаксисом - использовать$location.path()
вместо$state.go()
.Не уверен, будет ли он работать с AngularJS v1.2.0-rc.2 с ui-router v0.2.0. Я тестировал это решение на AngularJS v1.3.14 с ui-router v0.2.13.
Я просто понимаю, что необязательно передавать параметр в URL-адресе, как рекомендует gwhn.
Просто добавьте свои параметры со значением по умолчанию в определение вашего состояния. Ваше состояние все еще может иметь значение URL.
и добавьте параметр в
$state.go()
источник
Ни один из этих примеров на этой странице у меня не работал. Это то, что я использовал, и это хорошо сработало. В некоторых решениях говорилось, что вы не можете комбинировать URL-адрес с $ state.go (), но это неверно. Неудобно то, что вы должны определить параметры для URL-адреса, а также указать параметры. Оба должны присутствовать. Проверено на Angular 1.4.8 и UI Router 0.2.15.
В состоянии добавьте свои параметры в конец состояния и определите параметры:
В вашем контроллере ваш оператор go будет выглядеть так:
Затем, чтобы вытащить параметры и использовать их в контроллере вашего нового состояния (не забудьте передать $ stateParams в функцию вашего контроллера):
источник
В моем случае я попробовал использовать все варианты, указанные здесь, но никто не работал должным образом (angular 1.3.13, ionic 1.0.0, angular-ui-router 0.2.13). Решение было:
и в гос.го:
ура
источник
Я потратил много времени на борьбу с $ state & $ stateParams в Ionic / Angular;
Чтобы использовать $ state.go () и $ stateParams, вы должны иметь определенные настройки, а другие параметры не должны присутствовать.
В моем app.config () я включил $ stateProvider и определил в нем несколько состояний:
params
Ключ особенно важно. Также обратите внимание, что НЕТurl
ключей ... использование stateParams и URL НЕ смешиваются. Они исключают друг друга.В вызове $ state.go () определите его как таковой:
В
index
иanotherKey
переменные $ stateParams ТОЛЬКО будут заселены , если они первые перечислены в $ stateControllerparams
определяющей ключ.Внутри контроллера включите $ stateParams, как показано:
Переданные переменные должны быть доступны!
источник
Попробуйте с
reload: true
?Долго не мог понять, что происходит - оказывается, обманул себя. Если вы уверены, что все написано правильно и вы будете использовать то же состояние, попробуйте
reload: true
:Надеюсь, это сэкономит ваше время!
источник
Я столкнулся с подобной проблемой. После долгих поисков в Google, проб и тестов я получил рабочее решение. Вот мое решение, которое подойдет вам.
У меня есть два контроллера - searchBoxController и stateResultController и параметр с именем searchQuery. который нужно передать из представления, имеющего поле поиска, в представление, показывающее результаты, полученные с удаленного сервера. Вот как вы это делаете:
Ниже показан контроллер, из которого вы вызываете следующее представление, используя
$state.go()
Ниже показано состояние, которое будет вызываться при
$state.go()
выполнении:И наконец, контроллер, связанный с
app.searchResults
состоянием:источник
И в моем случае с родительским / дочерним состоянием. все параметры, объявленные в дочернем состоянии, должны быть известны родительскому состоянию
источник
Решение, к которому мы пришли, состояло из двух параметров:
в
источник
Ваше определение в router.js
Ваш контроллер должен добавить $ stateParams.
Вы можете отправить объект по параметру следующим образом.
источник
Я пытался перейти со страницы 1 на 2, и мне также пришлось передать некоторые данные.
В моем router.js я добавил имя и возраст параметров :
В Page1 , OnClick следующей кнопки:
На странице 2 я мог получить доступ к этим параметрам:
источник
Если это параметр запроса, который вы хотите передать следующим образом:
/toState?referer=current_user
тогда вам нужно описать свое состояние так:
источник: https://github.com/angular-ui/ui-router/wiki/URL-Routing#query-parameters
источник