Am nevoie pentru a trece și de a primi doi parametri de stat vreau sa tranzit pentru utilizarea ui-sref
de ui-router.
Ceva de genul, folosind link-ul de mai jos pentru trecerea de la starea de "acasă" cu " foo " și " bar " parametrii:
<a ui-sref="home({foo: 'fooVal', bar: 'barVal'})">Go to home state with foo and bar parameters </a>
Primirea " foo " și " bar " valorile dintr-un controler:
app.controller('SomeController', function($scope, $stateParam) {
//..
var foo = $stateParam.foo; //getting fooVal
var bar = $stateParam.bar; //getting barVal
//..
});
Am nedefinit
pentru `$stateParam în controler.
Ar putea cineva să mă ajute să înțeleg cum se face?
Edit:
.state('home', {
url: '/',
views: {
'': {
templateUrl: 'home.html',
controller: 'MainRootCtrl'
},
'A@home': {
templateUrl: 'a.html',
controller: 'MainCtrl'
},
'B@home': {
templateUrl: 'b.html',
controller: 'SomeController'
}
}
});
Am'am creat o exemplu pentru a afișa cum să. Actualizat "de stat" definiție ar fi:
$stateProvider
.state('home', {
url: '/:foo?bar',
views: {
'': {
templateUrl: 'tpl.home.html',
controller: 'MainRootCtrl'
},
...
}
Și acest lucru ar fi controller:
.controller('MainRootCtrl', function($scope, $state, $stateParams) {
//..
var foo = $stateParams.foo; //getting fooVal
var bar = $stateParams.bar; //getting barVal
//..
$scope.state = $state.current
$scope.params = $stateParams;
})
Ceea ce putem vedea este că statul acasă are acum url-ul este definit ca:
url: '/:foo?bar',
ceea ce înseamnă, că params în url-ul se așteaptă ca
/fooVal?bar=barValue
Aceste două link-uri vor treacă în mod corect argumente în controler:
<a ui-sref="home({foo: 'fooVal1', bar: 'barVal1'})">
<a ui-sref="home({foo: 'fooVal2', bar: 'barVal2'})">
De asemenea, operatorul nu consuma $stateParams "în loc de" $stateParam
.
Link-ul de la doc:
Puteti verifica aici
params : {}
Există, de asemenea, nou, mai granular setare params : {}
. Ca ne-am'am văzut deja, putem declara parametri ca parte a url
. Dar cu params : {}
configurare - putem extinde această definiție sau chiar să introducă parametrii care nu sunt parte a url-ului:
.state('other', {
url: '/other/:foo?bar',
params: {
// here we define default value for foo
// we also set squash to false, to force injecting
// even the default value into url
foo: {
value: 'defaultValue',
squash: false,
},
// this parameter is now array
// we can pass more items, and expect them as []
bar : {
array : true,
},
// this param is not part of url
// it could be passed with $state.go or ui-sref
hiddenParam: 'YES',
},
...
Setările disponibile pentru params sunt descrise în documentația de $stateProvider
Mai jos este doar un extras
Putem numi aceste params acest fel:
// hidden param cannot be passed via url
<a href="#/other/fooVal?bar=1&bar=2">
// default foo is skipped
<a ui-sref="other({bar: [4,5]})">
Verificați-l în acțiune aici
Nu't trebuie neapărat să aibă parametrii în interiorul URL-ul.
De exemplu, cu:
$stateProvider
.state('home', {
url: '/',
views: {
'': {
templateUrl: 'home.html',
controller: 'MainRootCtrl'
},
},
params: {
foo: null,
bar: null
}
})
Veți fi capabil de a trimite parametrii de stat, folosind fie:
$state.go('home', {foo: true, bar: 1});
// or
<a ui-sref="home({foo: true, bar: 1})">Go!</a>
Desigur, dacă vă reîncărcați pagina o dată pe "acasă" de stat, vei pierde parametrii de stare, deoarece acestea nu sunt stocate nicăieri.
O descriere completă a acestui comportament este documentat aici, sub params
rând în stat(nume, stateConfig)` secțiune.