2016-06-30 6 views
4

ich eine App mit 2 Zustände haben:Angular ui.router dynamische ui-SRef

  • profile
  • settings

Ich habe einen Link, der in meinem ganzen app wiederholt:

<a ui-sref="profile({id:profile.id})" ui-sref-active="active">Current state + ID</a> 

Wie kann ich die ui-sref ändern, um dynamisch zu sein? - um den aktuellen Zustand zusammen mit dem aktuellen stateParam darzustellen, was ich will (id)

wenn Sie eine Lösung finden, denken Sie daran, dass ich ui-sref-active verwenden möchte, also würde ich lieber vermeiden ng-klicken Sie auf etwas wie das.

+0

Can Sie erarbeiten? Es ist nicht klar, was du mit dynamic und den stateParam-Variablen meinst ... –

+0

siehe [this] –

+0

Verwenden Sie $ (https://github.com/angular-ui/ui-router/wiki/URL-Routing#url-parameters) state.href() und ng-href wie hier erklärt: [http://stackoverflow.com/questions/24349731/dynamicly-set-the-value-of-ui-sref-angularjs](http://stackoverflow.com/questions/24349731/dynamically-set-the-value-von-ui-sref-angularjs) –

Antwort

6

Ich denke, ui-sref wird analysieren, was innerhalb der (und) als Ausdruck ist.

Also alles, was Sie tun müssen, ist dies.

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

Kannst du ein Snippet damit posten? Sieht gut aus, aber nicht sicher, ob das funktionieren wird ... du –

+1

[Ändere Status und Parameter dynamisch in ui-sref] (http://stackoverflow.com/questions/32997064/change-both-state-and-params-dynamically-) in-ui-sref) –

+0

Danke! Sieht wirklich gut aus ... habe heute gelernt! –

1

ich denke, die sichere und verständliche Art und Weise einfach if else verwendet:

<div ng-if="checkState == 'profile'"> 
     <a ui-sref="profile({id:profile.id})" ui-sref-active="active">Current state + ID</a> 
</div> 

<div ng-if="checkState == 'settings'"> 
     <a ui-sref="settings({id:profile.id})" ui-sref-active="active">Current state + ID</a> 
</div> 

sicher, dass funktioniert ...

+0

Es wird, aber ich kann das nicht tun. Hier habe ich 2 Staaten, aber in meiner aktuellen App habe ich mehr als 2. Ich kann keine Berge von Bedingungen schaffen. Es ist eine gute Lösung, aber nicht für meinen Fall. Vielen Dank! – user3800799

+0

Ihre Antwort ist mit @Muhammad Usman –

1
$scope.routers = [ 
    { 
    state: 'profile', 
    params: {id: 1} 
    }, 
    { 
    state: 'settings', 
    params: {id: 1} 
    } 
]; 

Ausblick:

<a ng-repeat="router in routers" ui-sref="{{router.state}}(router.params)"></a> 
+0

{{router.state}}() -() Klammern auch benötigt. –