2015-10-07 6 views
9

Utilizzando ui-router vorrei impostare la direttiva ui-sref dinamicamente all'interno di un ng di ripetizione, in questo modo:cambiare sia stato e params dinamicamente in ui-sref

<a ng-repeat="step in steps" ui-sref="{{step.state(step.param)}}"></a> 

Dove passi è un array di "oggetti statali" ciascuno con il proprio stato e param oggetto:

var steps = [{state: 'foo', param: {id: 'bar'}}, {...}]; 

che genera un errore di interpolazione. D'altra parte, passando solo lo Stato o param lavora dinamicamente grandi per di seguito:

// Pass only dynamic state works great 
<a ng-repeat="step in steps" ui-sref="{{step.state}}"></a> 
// Pass only dynamic param works great 
<a ng-repeat="step in steps" ui-sref="foo(step.param)"></a> 

Ho provato ad utilizzare ng clic come una soluzione hacky, ma non ha giocato bene con l'interfaccia utente-sref-attiva:

<a ng-repeat="step in steps" ng-click="$state.go(step.state, step.param)"></a> 

Qualcuno ha familiarità con un buon modo per passare dinamicamente sia stato che param?

risposta

19

Penso che ui-sref analizzerà ciò che è all'interno dello ( e ) come espressione.

Quindi tutto ciò che dovete fare è questo.

<a ng-repeat="step in steps" ui-sref="{{step.state}}(step.param)"></a> 

Non sono sicuro se quanto sopra avrebbe funzionato, ma questa è la prima cosa che vorrei provare.

+1

La magia, ha funzionato. Grazie! –

+3

Ricorda che l'ui-router creerà anche l'attributo 'href' dalla tua variabile dinamica ma non lo aggiornerà in caso di modifica e il collegamento rimarrà sempre al valore della variabile iniziale – untitled

+0

Risolvi abbastanza impressionante – gsalgadotoledo