Дополнительно
Как передать контроллеру параметры с помощью ui-sref в ui-router
Мне нужно передать и получить два параметра состояния, в которое я хочу перейти, используя ui-sref
из ui-router.
Что-то похожее на использование приведенной ниже ссылки для перехода к состоянию home
с параметрами foo
и bar
:
<a ui-sref="home({foo: 'fooVal', bar: 'barVal'})">Go to home state with foo and bar parameters </a>
Получение значений foo
и bar
в контроллере:
app.controller('SomeController', function($scope, $stateParam) {
//..
var foo = $stateParam.foo; //getting fooVal
var bar = $stateParam.bar; //getting barVal
//..
});
Я получаю undefined
для $stateParam
в контроллере.
Может кто-нибудь помочь мне понять, как это сделать?
Edit:
.state('home', {
url: '/',
views: {
'': {
templateUrl: 'home.html',
controller: 'MainRootCtrl'
},
'A@home': {
templateUrl: 'a.html',
controller: 'MainCtrl'
},
'B@home': {
templateUrl: 'b.html',
controller: 'SomeController'
}
}
});
364
3
Я создал пример, чтобы показать, как это сделать. Обновленное определение
состояния
будет таким:А это будет контроллер:
Мы видим, что теперь у штата home url определен как:
что означает, что параметры в url ожидаются как
Эти две ссылки будут корректно передавать аргументы в контроллер:
Также контроллер потребляет
$stateParams
вместо$stateParam
.Ссылка на документ:
Вы можете проверить его здесь
параметры : {}
Существует также новая, более детальная настройка
params : {}
. Как мы уже видели, мы можем объявлять параметры как частьurl
. Но с настройкойparams : {}
мы можем расширить это определение или даже ввести параметры, которые не являются частью url:Настройки, доступные для параметров, описаны в документации к $stateProvider
Ниже приведена только выдержка
Мы можем вызвать эти параметры таким образом:
Проверьте это в действии здесь
Вам не обязательно иметь параметры внутри URL.
Например, с:
Вы сможете отправлять параметры в состояние, используя либо:
Конечно, если вы перезагрузите страницу один раз на состоянии
home
, вы потеряете параметры состояния, так как они нигде не хранятся.Полное описание этого поведения документировано здесь, в строке
params
в разделеstate(name, stateConfig)
.Вы просто неправильно написали
$stateParam
, должно быть$stateParams
(с буквой s). Вот почему вы получаете undefined ;)